繁体   English   中英

使用group_by starting_of_month,我如何获得一个活动以在下个月再次显示?

[英]Using group_by beginning_of_month, how do I get an event to show again in the next month?

使用Rails 5.0.2

我有一堆事件,按月分组,如下所示:


四月

赛事1

4月23日至4月24日

赛事2

4月28日至6月22日


可以

赛事3

5月4日至5月5日


问题是,某些事件需要很长时间! 例如,事件2在4月23日开始,但在6月22日结束。

我如何使活动项目在下个月再次出现?

当前工作代码:

控制器:

@monthly = @events.group_by { |t| t.start_date.beginning_of_month }

索引视图:

<% @monthly.sort.each do |month, event| %>
  <h2><%= month.strftime('%B') %></h2>

    <% for event in event %>

      <li><%= event.title %></li>
      <%= event.start_date %>
      <%= event.end_date %>

    <% end %>
<% end %>

谢谢你们!

您可以采取的一种方法是, 首先定义要显示的范围内所有月份的列表,然后将所有事件与该月份关联。

您可能希望根据需要调整以下代码-例如,如果您不想显示过去或下一个日历年的事件:

first_start_month = Event.minimum(:start_date).beginning_of_month
last_end_month = Event.maximum(:end_date).beginning_of_month

months = [first_start_date]
while(months.last != last_end_month) do
  months << months.last + 1.month
end

@monthly_events = months.map do |m|
  [m, @events.select { |e| (e.start_date .. e.end_date).include?(m) }]
end.to_h

这样,您的视图代码可以基本上保持不变:

<% @monthly_events.each do |month, events| %>
  <h2><%= month.strftime('%B') %></h2>

    <% events.each do |event| %>

      <li><%= event.title %></li>
      <%= event.start_date %>
      <%= event.end_date %>

    <% end %>
<% end %>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM