[英]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.