简体   繁体   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?

Using Rails 5.0.2 使用Rails 5.0.2

I have a bunch of events, grouped by month that looks like this: 我有一堆事件,按月分组,如下所示:


April 四月

Event 1 赛事1

23 April - 24 April 4月23日至4月24日

Event 2 赛事2

28 April - 22 June 4月28日至6月22日


May 可以

Event 3 赛事3

4 May - 5 May 5月4日至5月5日


The problem is, some events go for ages! 问题是,某些事件需要很长时间! Eg Event 2 starts 23 April but finishes 22 June. 例如,事件2在4月23日开始,但在6月22日结束。

How would I get the event item to show up again in the next month(s)? 我如何使活动项目在下个月再次出现?

Current working code: 当前工作代码:

Controller: 控制器:

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

Index view: 索引视图:

<% @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 %>

Thanks ya'll! 谢谢你们!

One approach you could take is to first define the list of all months in the range to be displayed, and then associate all events with that month. 您可以采取的一种方法是, 首先定义要显示的范围内所有月份的列表,然后将所有事件与该月份关联。

You may wish to tweak the code below for your needs - eg if you don't want to show events in the past, or in the next calendar year: 您可能希望根据需要调整以下代码-例如,如果您不想显示过去或下一个日历年的事件:

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

With this, your view code can remain basically unchanged: 这样,您的视图代码可以基本上保持不变:

<% @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