[英]Railscasts Calendar - “undefined method beginning_of_month”, Rails 4
[英]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.