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 の配列であり、値はカウントです。

したがって、3つの配列が必要な場合

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