Frage

Ive erhielt ein Gemälde Modell. Stimmen in der Malerei eingebettet. Wie kann ich abfragen alle Gemälde und Ordnung durch die Anzahl der Stimmen? In der Theorie würde ich auf der Liste wie die Daune all Gemälde mit denen mit den meisten Stimmen beginnen.

Für Referenzzwecke. Hier ist die Definition der beiden Modelle:

class Painting
  include Mongoid::Document
  include Mongoid::Timestamps

  field :title, :type => String

  embeds_many :votes
  ...
end

class Vote
  include Mongoid::Document
  include Mongoid::Timestamps

  embedded_in :painting, :inverse_of => :votes
  ...
end
War es hilfreich?

Lösung

Sie können es tun, indem Sie auf Zähler Cache Spalte . Sobald Sie diese Funktionalität implementieren, wie hier erwähnt: http://railscasts.com/episodes/23- Gegen Cache-Spalte , werden Gemälde Tabelle votes_count Spalte enthalten, die die Anzahl der Stimmen für jede Malerei

hält

Dann können Sie leicht named_scope in Ihrem painting.rb Modell zu bestellen Gemälde nach Anzahl der Stimmen hinzufügen:


class Painting
  named_scope :order_by_maximum_votes, :order => "votes_count DESC"
end

Dann können Sie alle Bilder wie auf diese Weise holen:

@paintings = Painting.all.order_by_maximum_votes

Andere Tipps

Wenn Sie immer noch nicht wollen, eine weitere Spalte in der Datenbank verwenden, hinzugefügt haben, können Sie eine weitere einfache Möglichkeit haben. Liefert alle Bilder aus der Datenbank und dann sortieren sie nach Stimmen zählen:


# It fetches all paintings needed
@paintings = Painting.all
# Then sort them by number of votes
@paintings = @paintings.sort {|p| p.votes.length}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top