2017-02-08 8 views
0

私は実際にAR Relationであるオブジェクトのリストを持っています。私は理解を容易にするためのハッシュとしての私のオブジェクトを表すmはグループのオブジェクトリスト/ AR関係by user_id

{ 
    agreement_id: 1, 
    app_user_id: 1, 
    agency_name: 'Small business 1' 
    ..etc.. 
}, 
{ 
    agreement_id: 2, 
    app_user_id: 1, 
    agency_name: 'Small business 2' 
    ..etc.. 
} 

:私のオブジェクトは、これらのフィールドがあります。

{ 
    1 => [1,2] 
} 

これは、ユーザーによってグループ化されたagreement_idsのリストを表しています。私はいつも私がグループ化しているユーザーを知っています。ここで私はこれまで試したものです:

where(app_user_id: user_id).where('...').select('app_user_id, agreement_id').group_by(&:app_user_id) 

これは私が欲しいものの構造を与えるではなく、まさに私が欲しいのデータは、ここではこれの出力です:

{1=> 
    [#<Agreement:0x6340fdbb agreement_id: 1, app_user_id: 1>, 
    #<Agreement:0x91bd4dd agreement_id: 2, app_user_id: 1>] 
} 

私は」

where(app_user_id: user_id).where('....').select('app_user_id, agreement_id').map do |ag| 
    { ag.app_user_id => ag.agreement_id } 
end.reduce(&:merge) 

しかし、それだけでこのような最後のAGREEMENT_IDとのマッピングを生成します:また、私は map方法でこれを行うことができるようになるだろう、とここで私が試したものです思ったveは

{1=>2} 

私は、言及する価値のない他のいくつかのことを試しました。誰もがこの仕事をする方法を提案することはできますか?

答えて

1

をお試しください:

where(app_user_id: user_id) 
    .where('...') 
    .select('app_user_id, agreement_id') 
    .group_by(&:app_user_id).map{|k,v| Hash[k, v.map(&:agreement_id)]} 
1

これはうまくいくかもしれない。この1

where(app_user_id: user_id). 
    where('...'). 
    select('app_user_id, agreement_id'). 
    map { |a| [a.app_user_id, a.agreement_id] }. 
    group_by(&:first)