IRB sencilla pregunta con respecto Conde
-
26-09-2019 - |
Pregunta
Tengo una clase llamada Deal.
Trato tiene vote_scores.
Me gustaría ver cuántos son vote_scores en Deal que son mayores que 2.
Mi suposición:
para vote_scores> 2 en Deal contar final
en realidad no trabajo: D
Editar:
Probé las ideas de todos. Pero tenga en cuenta que:
Deal.vote_scores
no funciona porque vote_scores no es un atributo de Deal, sino más bien un atributo de uno de sus ofertas. Así que si hiciera esto:
Deal.find (1) .vote_scores
devolvería un #.
vote_scores se crea una instancia dentro del haml aquí:
.deal_summary{:id => "deal_#{deal_view.id}"}
.score
= deal_view.vote_scores
en el modelo aquí:
def vote_scores
self.votes.inject(0){|sum, vote| sum + vote.value}
end
Solución
Si lo que desea es saber cuántos, el código más eficiente será la siguiente:
Deal.count(:conditions => ["vote_scores > ?", 2])
Esto será más rápido ya que el recuento se realiza en SQL en lugar de en rubí.
Editar
De acuerdo, podemos probar esto:
Deal.find(:all).select {|e| e.vote_scores > 2}.count
Esto devolverá el número total de objetos acuerdo que tiene vote_scores> 2
Con suerte eso es lo que quiere hacer.
Otros consejos
Deal.find (: todos,: condiciones => [ "? Vote_scores>", 2]). Longitud
deal = Deal.first #or whatever... Deal.find(10)
deal.votes.count :conditions => ['value > ?', 2]
para todos los Votos
Vote.count(:conditions => ['value > ?', 2'])