我有一个查询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> ]
从这个数组中我想制作一个array of arrays
,根据grouped
需要date
。意味着包含same date
的所有记录都必须grouped
为one array
。像这样我想拥有array of arrays
。
答案 0 :(得分:0)
如果您已经加载了所有记录:
dgvMeasures.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableWithoutHeaderText
dgvMeasures.SelectAll()
IO.File.WriteAllText(fileName, dgvMeasures.GetClipboardContent.GetText.TrimEnd)
dgvMeasures.ClearSelection()
如果您不使用Rails(ActiveSupport),则应使用inject而不是each_with_object
company_in_outs.each_with_object({}) do |record, hash|
(hash[record.date] ||= []) << record
end.values
我认为您也应该能够在db网站上进行排序。
答案 1 :(得分:0)
在Array中实际上有一个group_by
方法,但它不返回数组数组,而是返回一个对象,该对象包含与值相同的键和数组。
在你的情况下:
company_in_outs.group_by do |com|
com.date
end
上面的代码将返回按日期分组的对象作为键,以及与值相同的日期数组。
你可以遍历返回的对象,它将返回键和值,并做任何你喜欢的事情:)
希望这有帮助!