Simple CISR Question concernant Count
-
26-09-2019 - |
Question
J'ai une classe appelée Deal.
a affaire vote_scores.
Je voudrais voir combien vote_scores sont à Deal qui sont supérieures à 2.
Je pense:
pour vote_scores> 2 à Deal compter fin
ne fonctionne pas vraiment: D
Edit:
J'ai essayé les idées de tout le monde. Mais notez que:
Deal.vote_scores
ne fonctionne pas parce que vote_scores est pas un attribut de Deal, mais plutôt un attribut d'un de ses offres. Donc, si je l'ai fait:
Deal.find (1) .vote_scores
renverrait une #.
vote_scores est instancié dans le haml ici:
.deal_summary{:id => "deal_#{deal_view.id}"}
.score
= deal_view.vote_scores
dans le modèle ici:
def vote_scores
self.votes.inject(0){|sum, vote| sum + vote.value}
end
La solution
Si vous voulez juste savoir combien, le code plus efficace sera:
Deal.count(:conditions => ["vote_scores > ?", 2])
Ce sera plus rapide puisque le comptage se fait en sql plutôt que dans le rubis.
EDIT
D'accord, nous pouvons essayer ceci:
Deal.find(:all).select {|e| e.vote_scores > 2}.count
Ceci renvoie nombre total d'objet qui a beaucoup vote_scores> 2
Il faut espérer que ce que vous voulez faire.
Autres conseils
Deal.find (: all,: conditions => [ "? Vote_scores>", 2]). Longueur
deal = Deal.first #or whatever... Deal.find(10)
deal.votes.count :conditions => ['value > ?', 2]
pour tous les crédits
Vote.count(:conditions => ['value > ?', 2'])