Einfache IRB Frage zum Count
-
26-09-2019 - |
Frage
Ich habe eine Klasse namens Deal.
Deal hat vote_scores.
Ich möchte sehen, wie viele vote_scores in Deal sind, die größer als 2 ist.
Meine Vermutung:
für vote_scores> 2 in Deal Anzahl Ende
funktioniert nicht wirklich: D
Edit:
Ich habe versucht, alle Ideen. Aber beachten Sie, dass:
Deal.vote_scores
funktioniert nicht, weil vote_scores kein Attribut von Deal ist, sondern ein Attribut eines seiner Angebote. Also, wenn ich das tue:
Deal.find (1) .vote_scores
würde # zurückzukehren.
vote_scores instanziiert im haml hier:
.deal_summary{:id => "deal_#{deal_view.id}"}
.score
= deal_view.vote_scores
im Modell hier:
def vote_scores
self.votes.inject(0){|sum, vote| sum + vote.value}
end
Lösung
Wenn Sie nur wissen wollen, wie viele, desto effizienter Code wird sein:
Deal.count(:conditions => ["vote_scores > ?", 2])
Dies wird schneller, da die Zählung in SQL getan wird und nicht in Ruby.
Bearbeiten
Okay, wir können dies versuchen:
Deal.find(:all).select {|e| e.vote_scores > 2}.count
Dies wird zurückkehren Gesamtzahl der Deal-Objekt, das hat vote_scores> 2
Wir hoffen, dass das, was Sie tun wollen.
Andere Tipps
Deal.find (: alle,: conditions => [ "? Vote_scores>", 2]). Länge
deal = Deal.first #or whatever... Deal.find(10)
deal.votes.count :conditions => ['value > ?', 2]
für alle Stimmen
Vote.count(:conditions => ['value > ?', 2'])