4

好的,所以我有一个销售模型

recent_sales = Sale.recent
 => [#<Sale id: 7788, contact_id: 9988, purchasing_contact_id: 876, event_id: 988, #<BigDecimal:7fdb4ac06fe8,'0.0',9(18)>, fulfilled_at: nil, skip_print: nil, convention_id: 6, refund_fee: #<BigDecimal:7fdb4ac06de0,'0.0',9(18)>, processing: false>, #<Sale id: 886166, , contact_id: 7775,

recent_sales.count
=> 32

我知道我能做到

grouped_sales = recent_sales.group_by(&:contact_id).map {|k,v| [k, v.length]}
=> [[9988, 10], [7775, 22]]

但我真正需要的不仅仅是在contact_id上分组,还有event_id,所以最终结果看起来像这样

=> [[9988, 988, 5], [9988, 977, 5], [7775, 988, 2], [7775, 977, 20]]

所以我有 event_id 并且分组正确地将它们分开......关于如何做到这一点的任何想法

我试过了

 recent_sales.group('contact_id, event_id').map {|k,v| [k, k.event, v.length]}

但不行

4

3 回答 3

11
grouped_sales = recent_sales.group_by { |s| [s.contact_id, s.event_id] }
                .map { |k,v| [k.first, k.last, v.length] }
于 2012-06-16T22:42:29.033 回答
8

简单,试试

group(['contact_id','event_id'])

它对我有用。因此,我也发布了帮助他人的答案。

于 2014-02-03T06:44:09.997 回答
1

要求数据库进行分组

grouped_sales = recent_sales.group([:contact_id, :event_id]).count

结果是散列,每个键是联系人和事件 ID 的数组,值是计数。

所以如果你想要三个数组

grouped_sales = recent_sales.group([:contact_id, :event_id]).count.map{ |k,v| k << v }
于 2013-05-10T22:40:29.653 回答