Ruby HABTM关联循环



我想在have中实现一个没有重复的嵌套循环,并且属于多个关系

我有一个模型"战役",每个战役我也有战役数据。

我想在表格中显示每个活动及其活动数据。(嵌套(

@campaigns = current_user.campaigns
<% @campaigns.each do |item| %>
<% i = item.campaign_data %>
<% i.each do |cdata| %>
<%= cdata.date %>
<tr>
<td>
<%= item.name %>
</td>
<td>
<%= cdata.date %>
</td>
<td>
</td>
</tr>
<% end %>
<% end %>

我的问题是我的竞选活动被重复了。

我想实现这样的目标:

每个活动都列在表中,其正下方有相应的活动数据,如果没有活动数据,下一个循环将从下一个活动开始——这可能吗?

最佳

<% i.each do |cdata| %>循环中使用<%= item.name %>时,可能会得到重复的活动。因此,如果一个活动有4个campaign_datas,您将看到该活动名称4次。

您应该正确使用命名约定,如果活动有许多数据campaign_data,那么您应该在关联中指定,即has_many :campaign_datas

此外,以下代码应在控制器中

@campaigns = current_user.campaigns.include(:campaign_datas)

注意:-我使用include来避免n + 1,请阅读此处。

可视

<% for campaign in @campaigns %>
<% next if @campaigns.campaign_datas.blank? %>
<tr>
<td><%= item.name %></td>
</tr>
<% for campaign_data in @campaigns.campaign_datas %>
<tr>
<td><%= campaign_data.date %></td>
</tr>
<% end %>
<% end %>

注:-<% next if @campaigns.campaign_datas.blank? %>行用于在没有活动数据的情况下跳过活动。

最新更新