如何在许多对象的一侧按列进行分组,并且能够通过另一侧的匹配对每个对象进行分组。

如何在许多对象的一侧按列进行分组,并且能够通过另一侧的匹配对每个对象进行分组。

问题描述:

我有3个表格,事件,游戏,事件游戏(加入其他人)。我正在尝试创建一个列出每个事件的页面,每场比赛将在活动中进行。该页面当前正在工作,但正在为HTML表格上的每一行创建一个新的DB查询。我从控制器发送@events = Event.all并以这种方式访问​​信息。如何在许多对象的一侧按列进行分组,并且能够通过另一侧的匹配对每个对象进行分组。

<% @events.each do |event| %> 
    <tr> 
     <td><a href="/events/<%= event.id %>"><%= event.title %></a></td> 
     <td><a href="https://*.com/users/<%= event.user.id %>"><%= event.user.username %></a></td> 
     <td><%= event.description %></td> 
     <td> 
     <% event.games.each do |game| %> 
      <a href='/games/<%= game.id %>'><%= game.name %></a> 
     <% end %> 
     </td> 

我试图通过创建一个包含所有信息的新查询来更改从控制器发送的内容。这并不是我的工作方式,问题是当我做@ events.each事件会重复,但是很多游戏都会在那里。我试过了,但显然我的分组不正确。我将如何进行分组,以便每个事件ID只有1个事件,同时还能够遍历附加到事件的游戏?

在你的控制,而不是@events = Event.all,请尝试以下操作:

@events = Event.inclues(:games).all 

参考ActiveRecord::QueryMethods#includes获取更多信息。

此外,限制您要加载的@events的数量总是一个好主意,通过where条件或至少通过分页。