如何搜索查询结果,以防止发出许多请求

Jas*_*nis 2 ruby ruby-on-rails

我有以下一组查询,但我确定这不是干.但是,我无法找到如何通过deal 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
Run Code Online (Sandbox Code Playgroud)

Mla*_*vić 5

使用GROUP BY SQL子句:

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

编辑:我忘了你已经加载了所有记录.在这种情况下,您可以通过这种方式获得每个状态的计数:

Hash[deals.group_by(&:status).map{|k,v| [k,v.count]}]
Run Code Online (Sandbox Code Playgroud)