关于计数的简单IRB问题

时间:2010-05-13 13:09:52

标签: ruby-on-rails irb

我有一个名为Deal的课程。

交易有vote_scores。

我想看看Deal中有多少个vote_scores大于2。

我的猜测:

for vote_scores>交易2 计数 端

不能真正起作用:D

编辑:

我尝试了每个人的想法。但请注意:

  
    

Deal.vote_scores

  

不起作用,因为vote_scores不是Deal的属性,而是其中一个Deals的属性。所以,如果我这样做:

  
    

Deal.find(1).vote_scores

  

会返回#。

vote_scores在haml中实例化:

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

在这里的模型中:

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

3 个答案:

答案 0 :(得分:2)

如果你只想知道多少,那么代码效率会更高:

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

这会更快,因为计数是在sql而不是ruby中完成的。

修改

好的,我们可以试试这个:

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

这将返回具有vote_scores>的交易对象的总数。 2

希望这就是你想要做的。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

Vote.count(:conditions => ['value > ?', 2'])