Ruby on rails 按年份和月份对rails中的ruby阵列进行分组

Ruby on rails 按年份和月份对rails中的ruby阵列进行分组,ruby-on-rails,ruby,Ruby On Rails,Ruby,我现在把我的事件分类如下 @events_by_month = @events.group_by { |x| x.date.month } 这取决于所有事件都发生在同一年,但我现在也要展示下一年的事件。 我希望输出与上述输出的格式相同,但按年份排序,即 这就是我所拥有的 {3=> 这就是我想要的 {3=>[#]},{3=>[#]} 我想这对你有用 results = [] @events.group_by { |x| x.date.year }.sort. each { |_, e|

我现在把我的事件分类如下

@events_by_month = @events.group_by { |x| x.date.month }
这取决于所有事件都发生在同一年,但我现在也要展示下一年的事件。 我希望输出与上述输出的格式相同,但按年份排序,即 这就是我所拥有的

{3=>

这就是我想要的

{3=>[#]},{3=>[#]}

我想这对你有用

results = []

@events.group_by { |x| x.date.year }.sort.
  each { |_, e| results << e.group_by { |x| x.date.month } }
results=[]
@events.group_by{x|x.date.year}.sort。
每个{| |,e |结果[#,
#],
1=>[#]
},
{
11=>[#]
}
]

我想这对你有用

results = []

@events.group_by { |x| x.date.year }.sort.
  each { |_, e| results << e.group_by { |x| x.date.month } }
results=[]
@events.group_by{x|x.date.year}.sort。
每个{| |,e |结果[#,
#],
1=>[#]
},
{
11=>[#]
}
]

据我所知,您希望按月份和年份对事件进行分组。 然后使用
@events_by_month=@events.group_by{x |[x.date.month,x.date.year]}
你会收到

{[3, 2014]=>[#<Event id: 7032, date: "2014-03-02 00:00:00">]},{[3,2015]=> [#<Event id: 7033, date: "2015-03-02 00:00:00">]}
{[3,2014]=>[#]},{[32015]=>[#]}

在您的示例中,它将比复制的键更正确。

据我所知,您希望按月份和年份对事件进行分组。 然后使用
@events_by_month=@events.group_by{x |[x.date.month,x.date.year]}
你会收到

{[3, 2014]=>[#<Event id: 7032, date: "2014-03-02 00:00:00">]},{[3,2015]=> [#<Event id: 7033, date: "2015-03-02 00:00:00">]}
{[3,2014]=>[#]},{[32015]=>[#]}

在您的示例中,它比复制的键更正确。

假设事件已排序(
排序依据(&:date)
):


假设事件已排序(
排序依据(&:date)
):


预期的输出是一个散列数组,其中一个元素的键是month?看起来很奇怪。预期的输出是一个哈希数组,其中一个元素的键是month?看起来很奇怪。
@events.group_by { |e| e.date.year } \
       .values \
       .map { |es| 
         es.group_by { |e| e.date.month } 
       }