Rails Group by 内部 Group by

Fer*_*ndo 0 ruby sql group-by ruby-on-rails activemodel

我需要先按 YEAR 然后按 MONTH 对我的 ActiveRecords 进行分组,如下所示:

{2017=>
    "January"=>
        [Record1, record2, etc]
    "February"=>
        [Record1, record2, etc]
 2016=>
    "January"=>
        [Record1, record2, etc]
    "February"=>
        [Record1, record2, etc]
}
Run Code Online (Sandbox Code Playgroud)

等等...

我试着用

.group_by( |a| [a.year, a.month] ) 
Run Code Online (Sandbox Code Playgroud)

但我能得到的最好的是:

{[2017, "January"]=>
        [Record1, record2, etc]
 [2017,"February"]=>
        [Record1, record2, etc]
 [2016, "January"]=>
        [Record1, record2, etc]
 [2016,"February"]=>
        [Record1, record2, etc]
}
Run Code Online (Sandbox Code Playgroud)

谢谢

PS:我的模型中有名为 YEAR 和 MONTH 的列。

PS2:我使用 Ruby 2.3 和 Rails 4.2

eho*_*ann 5

.group_by(&:year).each_with_object({}) {|(k, v), h| h[k] = v.group_by(&:month) }
Run Code Online (Sandbox Code Playgroud)

会给你你想要的:

{ 2017 => { 
    "January" => [record1, record2, etc], 
    "February" => [record1, record2, etc] 
  },
  2016 => {
...
Run Code Online (Sandbox Code Playgroud)

所以

results[2017]['January'] #=> [record1, record2, etc]
Run Code Online (Sandbox Code Playgroud)