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
¿Fue útil?

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'])
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top