在我的应用中,我有单一和反复发生的事件。
Event(..., starts_at: datetime, is_recurrent: boolean, period: datetime, ends_at: datetime)
如果事件是单一的,我使用starts_at
字段来确定它何时发生。对于定期发生的事件,我也使用ends_at
和period
字段。
对于单一事件,我可以简单地写下这样的事情:
控制器:
@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 方法用于这些目的吗?
答案 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