0

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

我有一个模型“广告系列”,对于每个广告系列,我也有广告系列数据。

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

@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 %>

我的问题是我的广告系列被重复了。

我想实现这样的目标:

每个活动都列在表中,其对应的活动数据直接位于其下方,如果没有活动数据,则下一个循环从下一个活动开始 - 这可能吗?

最良好的问候

4

1 回答 1

0

<%= item.name %>当您在<% i.each do |cdata| %>循环中使用时,您可能会收到重复的广告系列。因此,如果一个活动有 4 个活动数据,您将看到活动名称 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? %>如果没有活动数据,则使用该行跳过活动。

于 2020-11-11T09:48:07.040 回答