2016-06-16 19 views
0

company_in_outs = company.in_outs.where('date >= ? and date <= ?', Date.today.at_beginning_of_month, Date.today.end_of_month)私に<ActiveRecord::AssociationRelationを返信しているクエリがあります。今私は配列の配列にこれらの配列を日付値に基づいてグループ化したいと思っています。配列を配列の配列にする方法は?

for example. 

#<ActiveRecord::AssociationRelation [#<InOut id: 2806, date: "2016-06-01", created_at: "2016-06-02 07:01:52", updated_at: "2016-06-16 07:43:45", company_id: 1>,#<InOut id: 2806, date: "2016-06-01", created_at: "2016-06-02 07:01:52", updated_at: "2016-06-16 07:43:45", company_id: 1>,#<InOut id: 2806, date: "2016-06-01", created_at: "2016-06-02 07:01:52", updated_at: "2016-06-16 07:43:45", company_id: 1>,#<InOut id: 2806, date: "2016-06-02", created_at: "2016-06-02 07:01:52", updated_at: "2016-06-16 07:43:45", company_id: 1>,#<InOut id: 2806, date: "2016-06-02", created_at: "2016-06-02 07:01:52", updated_at: "2016-06-16 07:43:45", company_id: 1>,#<InOut id: 2806, check_in: "2016-06-24 16:16:00", check_out: "2016-06-25 01:16:00", date: "2016-06-01", created_at: "2016-06-02 07:01:52", updated_at: "2016-06-16 07:43:45", company_id: 1> ] 

dategroupedをベースとする必要があり、私はarray of arraysを作りたい、この配列、から。 same dateを含むすべてのレコードがgroupedであることが、one arrayであることを意味します。このように私はarray of arraysを持っていたい。

答えて

0

あなたはすでにロードされたすべてのレコードを持っている場合:あなたは、私はあなたがことができるはずだと思うeach_with_object

company_in_outs.inject({}) do |hash, record| 
    (hash[record.date] ||= []) << record 
    hash 
end.values 

の代わりに注入使用する必要があります(activesupportのを)Railsのを使用していない場合は

company_in_outs.each_with_object({}) do |record, hash| 
    (hash[record.date] ||= []) << record 
end.values 

をデータベースサイトでもソートが完了しました。

0

実際には配列にはgroup_byメソッドがありますが、配列の配列を返す代わりに、keyと同じキーの配列を持つオブジェクトを返します。あなたのケースで

company_in_outs.group_by do |com| 
    com.date 
end 

コードが上記の値と同じ日付のキーとして日付でグループ化されたオブジェクト、および配列を返します。

あなたは可能性がキーと値を戻し、あなたが好きなようになる返すオブジェクトを介してループ:)

・ホープこのことができます!

関連する問題