2016-02-26 3 views
2

Я пытаюсь создать страницу, показывающую события, сгруппированные по месяцам и отсортированные по дате события.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> 
+1

Не связано, но вам почти не нужно использовать цикл 'for'. 'events.each do | event |' более идиоматично. Теперь, как вы отредактируете '_event' частичным? Пожалуйста, покажите индексный шаблон. – BroiSatse

+0

Эй @BroiSatse. Спасибо за примечание. Я использовал пример [RailsCast] (http://railscasts.com/episodes/29-group-by-month), чтобы создать это, когда они используют цикл 'for' для получения результата. Я поделился шаблоном индекса в моем первоначальном вопросе. – marcost85

ответ

1

С помощью:

<%= render @events %> 

Rails итерация всех ваших событий и визуализации информации в _event.html.erb частичный каждый раз ,

Вы можете попробовать разместить код event_months в своей собственной части, в index.html.erb, или в другом месте.

+0

Большое спасибо. Простой ответ на вопрос, который вызвал у меня массированную головную боль сегодня. – marcost85

Смежные вопросы