我试图创建一个页面,显示按月分组的事件并按事件日期排序。
events_controller.rb
def index
@events = Event.all.order("date DESC")
@event_months = @events.group_by { |t| t.date.beginning_of_month }
end
_event.html.erb
<% @event_months.each do |month, events| %>
<h2><%= month.strftime('%B') %></h2>
<% for event in events %>
<div class="events">
<%= event.name %>
<%= format_date(event.date) %>
<%= event.description %>
</div>
<% end %>
<% end %>
我的数据库中有五个事件。打开活动index.html
,我可以看到5月的一个活动,4月的两个,3月的两个活动。这重复四次;我想,它会像数据库中的事件一样经常重复循环。
我需要做什么才能让每个事件只显示一次?
以下是呈现部分的index.html.erb
:
<div class="container">
<h1>Events</h1>
<div class="row">
<%= render @events %>
</div>
<div class="row event-row">
<div class="col-xs-12 neues-event">
<%= link_to 'Neues Event erstellen', new_event_path, class: "btn btn-default center-block" %>
</div>
</div>
</div>
答案 0 :(得分:1)
使用:
<%= render @events %>
Rails正在迭代您的所有事件,并且每次都会呈现 _event.html.erb 部分。
您可以尝试将 event_months 代码放在其自己的partial,index.html.erb或其他位置。