Domanda

Ho una classe chiamata Deal.

Deal ha vote_scores.

mi piacerebbe vedere quanti vote_scores sono a Deal che sono maggiori di 2.

La mia ipotesi:

per vote_scores> 2 a Deal contare end

in realtà non lavoro: D

Modifica:

Ho cercato le idee di tutti. Ma nota che:

  
    

Deal.vote_scores

  

non funziona perché vote_scores non è un attributo di Deal, ma piuttosto un attributo di uno dei suoi migliori offerte. Quindi, se ho fatto questo:

  
    

Deal.find (1) .vote_scores

  

sarebbe tornato un #.

vote_scores viene creata un'istanza all'interno del Haml qui:

.deal_summary{:id => "deal_#{deal_view.id}"}
.score
  = deal_view.vote_scores

nel modello qui:

def vote_scores
  self.votes.inject(0){|sum, vote| sum + vote.value}
end
È stato utile?

Soluzione

Se si vuole solo sapere quanti, il codice più efficiente sarà:

Deal.count(:conditions => ["vote_scores > ?", 2])

Questa sarà più veloce in quanto il conteggio viene fatto in SQL piuttosto che in Ruby.

Modifica

D'accordo, siamo in grado di provare questo:

Deal.find(:all).select {|e| e.vote_scores > 2}.count

Ciò restituirà il numero totale di oggetti accordo che ha vote_scores> 2

Speriamo che questo è ciò che si vuole fare.

Altri suggerimenti

Deal.find (: all,: condizioni => [ "? Vote_scores>", 2]). Length

deal = Deal.first #or whatever... Deal.find(10)
deal.votes.count :conditions => ['value > ?', 2]

per tutte le votazioni

Vote.count(:conditions => ['value > ?', 2'])
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top