簡體   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