我目前正在对我的事件进行排序;
@events_by_month = @events.group_by { |x| x.date.month }
这依赖于所有事件都发生在同一年的事实,但我现在也想要展示明年的事件。 我希望输出的格式与上面输出的格式相同,但按年份排序 这就是我所拥有的;
{3=>[#<Event id: 7032, date: "2014-03-02 00:00:00">, #<Event id: 7033, date: "2015-03-02 00:00:00">]}
这就是我想要的;
{3=>[#<Event id: 7032, date: "2014-03-02 00:00:00">]},{3=> [#<Event id: 7033, date: "2015-03-02 00:00:00">]}
答案 0 :(得分:4)
您希望按照我的理解按月和年分组事件。
然后用
@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">]}
在您的示例中,它将比重复的键更正确。
答案 1 :(得分:0)
我认为这对你有用
results = []
@events.group_by { |x| x.date.year }.sort.
each { |_, e| results << e.group_by { |x| x.date.month } }
例如
[
#<Event:0x007fd957d3dd98 @date=2014-03-02 21:37:18 +0200>,
#<Event:0x007fd957d6e9e8 @date=2014-01-01 00:00:00 +0200>,
#<Event:0x007fd957da4228 @date=2014-03-01 17:52:12 +0200>,
#<Event:0x007fd957db98f8 @date=33702-11-27 23:25:40 +0200>
]
将给出
[
{
3=>[#<Event:0x007fd957d3dd98 @date=2014-03-02 21:37:18 +0200>,
#<Event:0x007fd957da4228 @date=2014-03-01 17:52:12 +0200>],
1=>[#<Event:0x007fd957d6e9e8 @date=2014-01-01 00:00:00 +0200>]
},
{
11=>[#<Event:0x007fd957db98f8 @date=33702-11-27 23:25:40 +0200>]
}
]
答案 2 :(得分:0)
假设事件已排序(sort_by(&:date)
):
@events.group_by { |e| e.date.year } \
.values \
.map { |es|
es.group_by { |e| e.date.month }
}