我有3个表,事件,游戏,事件游戏(加入其他人)。我正在尝试创建一个列出每个事件的页面,每个游戏都将在活动中进行。该页面当前正在工作,但正在为HTML表格上的每一行创建一个新的数据库查询。我从控制器发送@events = Event.all并以这种方式访问信息。
<% @events.each do |event| %>
<tr>
<td><a href="/events/<%= event.id %>"><%= event.title %></a></td>
<td><a href="/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事件时,很多游戏都将在那里重复。
@events = Event.joins("LEFT JOIN eventgames ON events.id = eventgames.event_id")
.select("events.*")
.group("events.id")
.joins("LEFT JOIN games ON eventgames.game_id = games.id")
.select("games.id as gameid, games.name")
.group("games.id")
我试过,但显然我的分组不正确。我将如何对其进行分组,以便每个事件ID只有1个事件,同时还可以遍历事件附带的游戏?
答案 0 :(得分:0)
在您的控制器中,而不是@events = Event.all
,请尝试以下操作:
@events = Event.inclues(:games).all
有关详细信息,请参阅ActiveRecord::QueryMethods#includes。
此外,最好通过@events
条件或至少通过分页来限制您要加载的where
的数量。