Ruby group_by方法

时间:2014-03-13 16:41:33

标签: ruby-on-rails ruby

在我的应用中,我有单一和反复发生的事件。

Event(..., starts_at: datetime, is_recurrent: boolean, period: datetime, ends_at: datetime)

如果事件是单一的,我使用starts_at字段来确定它何时发生。对于定期发生的事件,我也使用ends_atperiod字段。

对于单一事件,我可以简单地写下这样的事情:

控制器:

@events_by_date = @events.group_by{ |event| event.starts_at.to_date }

查看:

<%= render :partial => "event", :collection => @events_by_date[date] %>

但我不知道如何实现这一点,例如日常活动。 现在所有事件(单个和重复)仅在它们开始时显示(因为我使用group_by{ |event| event.starts_at.to_date })。如果活动从3月24日开始到3月30日结束,我想这样做,这个活动必须在3月31日之前的每一天播出。 我可以将 group_by 方法用于这些目的吗?

enter image description here

1 个答案:

答案 0 :(得分:1)

我不确定您是否可以在单group_by

中执行此操作
@events_by_date = @events.reject{|event| event.is_recurrent}.group_by{ |event| event.starts_at.to_date }
@events.select{|event| event.is_recurrent}.map do |event|
  (event.starts_at..event.ends_at).each do |time|
    @events_by_date[time.to_date] ||= []; 
    @events_by_date[time.to_date] << event
  end
end