Pergunta simples do IRB sobre contagem
-
26-09-2019 - |
Pergunta
Eu tenho uma aula chamada negócio.
Deal tem voto_scores.
Eu gostaria de ver quantos votos estão em acordo com maiores que 2.
Meu palpite :
para voto_scores> 2 no final da contagem de negócios
Realmente não funciona: D
Editar:
Eu tentei as idéias de todos. Mas observe que:
Deal.vote_scores
Não funciona porque o voto_scores não é um atributo de acordo, mas um atributo de um de seus acordos. Então, se eu fiz isso:
Deal.find (1) .vote_scores
retornaria um #.
Vote_scores é instanciado no Haml aqui:
.deal_summary{:id => "deal_#{deal_view.id}"}
.score
= deal_view.vote_scores
no modelo aqui:
def vote_scores
self.votes.inject(0){|sum, vote| sum + vote.value}
end
Solução
Se você só quiser saber quantos, o código mais eficiente será:
Deal.count(:conditions => ["vote_scores > ?", 2])
Isso será mais rápido, pois a contagem é feita no SQL e não no Ruby.
EDITAR
Ok, podemos tentar o seguinte:
Deal.find(:all).select {|e| e.vote_scores > 2}.count
Isso retornará o número total de objeto de acordo que vote_scores> 2
Espero que seja isso que você quer fazer.
Outras dicas
Deal.find (: todos ,: condições => ["vote_scores>?", 2]). Comprimento
deal = Deal.first #or whatever... Deal.find(10)
deal.votes.count :conditions => ['value > ?', 2]
para todos os votos
Vote.count(:conditions => ['value > ?', 2'])