Question

I have a class called Deal.

Deal has vote_scores.

I would like to see how many vote_scores are in Deal that are greater than 2.

My guess :

for vote_scores > 2 in Deal count end

Doesn't really work :D

Edit:

I tried everyone's ideas. But note that :

Deal.vote_scores

Doesn't work because vote_scores is not an attribute of Deal, but rather an attribute of one of its Deals. So if I did this :

Deal.find(1).vote_scores

would return a #.

vote_scores is instantiated within the haml here:

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

in the model here:

def vote_scores
  self.votes.inject(0){|sum, vote| sum + vote.value}
end
Was it helpful?

Solution

If you just want to know how many, the more efficient code will be:

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

This will be faster since the counting is done in sql rather than in ruby.

EDIT

Okay, we can try this:

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

This will return total number of deal object that has vote_scores > 2

Hopefully that is what you want to do.

OTHER TIPS

Deal.find(:all, :conditions => ["vote_scores > ?", 2]).length

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

for all Votes

Vote.count(:conditions => ['value > ?', 2'])
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top