2016-02-26 52 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