如何迭代集合,但按日期细分结果?

时间:2015-07-29 12:56:40

标签: ruby-on-rails ruby-on-rails-4

所以我有一系列@events,目前在控制器中定义如下:

@events = current_user.events.order(created_at: :desc)

但是,在我看来,我希望能够以不同的类别显示事件,但所有事件都按照创建日期排序。例如,像这样:

今天

  • 活动1
  • 活动2
  • 活动3

昨天

  • 活动1
  • 活动2
  • 活动3

7月27日

  • 活动1
  • 活动2
  • 活动3

7月26日

  • 活动1
  • 活动2
  • 活动3

当然,我希望动态显示日期的名称(即今天应该始终显示Today,所以我想使用Rails天助手很好。

但我也希望它能够在过去2或3天后切换到常规日期。

最优雅的方法是什么?理想情况下,如果我可以简单地修改@events实例变量以适应这种情况,那么它就会很棒,然后在视图中创建一些帮助器。

但是看起来会是什么样的,@events修改和帮助。

2 个答案:

答案 0 :(得分:2)

您可以从数据库中获取分组记录:

@grouped_events = @events.group_by { |e| e.created_at.to_date }

这将为您提供一个哈希,其中日期为键,事件数组为值。

答案 1 :(得分:0)

您需要遍历事件并检查事件的日期是否与上一个事件不同。如果不同则显示今天/昨天/日期的标题然后显示事件,否则只显示事件并重置日期检查。

@events = current_user.events.order(created_at: :desc)
cur_date = nil
@events.each do |event|
  if cur_date != event.created_at
    #Logic to display Today/Yesterday/Date
  end
  cur_date = event.created_at
  #Logic here to display event
end