Я пытаюсь создать страницу, показывающую события, сгруппированные по месяцам и отсортированные по дате события.Rails group_by, показывающий несколько раз
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
, я вижу одно событие в мае, два в апреле, два в марте. Это повторяется четыре раза; он повторяет цикл так часто, как есть события в базе данных, я думаю.
Что нужно для того, чтобы каждое событие показывалось только один раз?
Вот 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>
Не связано, но вам почти не нужно использовать цикл 'for'. 'events.each do | event |' более идиоматично. Теперь, как вы отредактируете '_event' частичным? Пожалуйста, покажите индексный шаблон. – BroiSatse
Эй @BroiSatse. Спасибо за примечание. Я использовал пример [RailsCast] (http://railscasts.com/episodes/29-group-by-month), чтобы создать это, когда они используют цикл 'for' для получения результата. Я поделился шаблоном индекса в моем первоначальном вопросе. – marcost85