我有以下一组问题,但我确信这不是干的。但是,我无法找到如何通过deals var进行筛选,而不是再次查询每个var。这可能吗?

deals = Deal.all
won = Deal.find( :all, :conditions => ["status = 'won'"] ).count
pending = Deal.find( :all, :conditions => ["status = 'pending'"] ).count
lost = Deal.find( :all, :conditions => ["status = 'lost'"] ).count

最佳答案

使用GROUP BYsql子句:

Hash[Deal.all(:select => 'status, count(*) as count', :group => 'status').map{|e|
  [e.status, e.count]
}]

编辑:我忘了你已经加载了所有的记录。在这种情况下,可以通过以下方式获取每个状态的计数:
Hash[deals.group_by(&:status).map{|k,v| [k,v.count]}]

关于ruby-on-rails - 如何搜索查询结果,以防止发出过多请求,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4678934/

10-12 02:39