Ruby on rails 将ActiveRecord::关系按字段分组到具有字典的哈希中

Ruby on rails 将ActiveRecord::关系按字段分组到具有字典的哈希中,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我正在运行一个ActiveRecord查询,该查询返回一组记录 让我们以此为例 ad_account campaign_id impressions 1 1 500 1 2 8,800 1 3 6,000 2 7 900 2 9

我正在运行一个
ActiveRecord
查询,该查询返回一组记录

让我们以此为例

ad_account    campaign_id    impressions
1             1              500
1             2              8,800    
1             3              6,000
2             7              900
2             9              9,324
我如何将这些结果转换成一个哈希值,其中包含一个按ad_帐户分组的数组

所以我想要这个

{"1"=>[{ad_account: 1, campaign_id: 1, impressions: 500}, {ad_account: 1, campaign_id: 2, impressions: 8,800}, {ad_account: 1, campaign_id: 3, impressions: 6,000}], 

"2"=>[{ad_account: 2, campaign_id: 7, impressions: 900}, {ad_account: 2, campaign_id: 9, impressions: 9324}]}
因此,基本上每个
ad_账户都是键,值是所有字段的数组

我该怎么做

我已经试过了,但它不起作用,因为它只是覆盖

allCampaigns.each do |campaign| 

    hash[campaign.ad_account] = campaign 

end
你可以用这个。例如:

Ad.all.group_by(&:ad_account)
# => { 1 => [#<Ad id: 1, ad_account: 1, campaign_id: 1, impressions: 500>,
#            #<Ad id: 2, ad_account: 1, campaign_id: 2, impressions: 8800>,
#            #<Ad id: 3, ad_account: 1, campaign_id: 3, impressions: 6000>],
#      2 => [#<Ad id: 4, ad_account: 2, campaign_id: 7, impressions: 900>,
#            #<Ad id: 5, ad_account: 2, campaign_id: 9, impressions: 9824>]}
你可以用这个。例如:

Ad.all.group_by(&:ad_account)
# => { 1 => [#<Ad id: 1, ad_account: 1, campaign_id: 1, impressions: 500>,
#            #<Ad id: 2, ad_account: 1, campaign_id: 2, impressions: 8800>,
#            #<Ad id: 3, ad_account: 1, campaign_id: 3, impressions: 6000>],
#      2 => [#<Ad id: 4, ad_account: 2, campaign_id: 7, impressions: 900>,
#            #<Ad id: 5, ad_account: 2, campaign_id: 9, impressions: 9824>]}

组_by是否影响查询?如果是,我不想按ad_帐户分组,因为我需要其他字段。不过我很快就会试试这个!啊,不,它没有。这是
Enumerable#group_by
方法(包括
Enumerable
),它没有将
groupby
子句应用到查询中(因为您需要ActiveRecord的
group
方法),所以它在查询完成并且对象处于关系中后才起作用。我甚至没有想到有一个sql子句,这可能会与之混淆,非常感谢!我会在一个小时左右回来,把这个标记为答案,因为它似乎正适合我。我很感激您的时间团队对查询有何影响?如果是,我不想按ad_帐户分组,因为我需要其他字段。不过我很快就会试试这个!啊,不,它没有。这是
Enumerable#group_by
方法(包括
Enumerable
),它没有将
groupby
子句应用到查询中(因为您需要ActiveRecord的
group
方法),所以它在查询完成并且对象处于关系中后才起作用。我甚至没有想到有一个sql子句,这可能会与之混淆,非常感谢!我会在一个小时左右回来,把这个标记为答案,因为它似乎正适合我。谢谢你抽出时间