Wie man Liste Gemälde basierend auf der Anzahl der Stimmen
-
28-09-2019 - |
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
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ältDann 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}