在Rails中进行分组和计数

我知道我以前见过这个,但现在找不到任何东西。 我想按某个列对查询进行分组,并能够显示每个组中有多less个查询。 我得到了第一部分:

@line_items = @project.line_items.all(:group => "device_id") 

这是用于我的订单项索引视图,这只是一个显示订单项的表。 现在,如何在该表格中为“count”创build一个列,以便按设备对订单项进行分组?

您可以count line_items ,它会返回device_idcount的有序散列。

 @project.line_items.group(:device_id).count 

devise_id作为密钥和相关logging计数的散列值

 @project.line_items.group(:devise_id).count 

只需添加一个:select选项:

 @line_items = @project.line_items.all( :group => "device_id", :select => "device_id, COUNT(*) as count" ) 

然后每个@line_item将有一个count属性。

就像是

  User.all(:joins => :comments, :select => "users.*, count(comments.id) as comments_count", :group => "users.id") 

也可能工作…

这个提交之后:

https://github.com/rails/rails/commit/a1c05dd8b9bd3623289d3aa73dda2943d620cc34

有一个新的方法来做同样的事情:

 @project.line_items.count(:group => LineItem.arel_table[:device_id]) 

因为只有数才会在这里更快,而不是

 @project.line_items.pluck(:device_id).count @project.line_items.pluck(:device_id).uniq.count