0

我正在从几个不同模型的几个不同变量中访问属性。我试图找到在表格中显示这些属性的最佳方式,但在我看来,我得到了一些不需要的重复。这是我表的相关部分。

<% @list_items.each do |l| %>
  <% @i_items.each do |i| %>
    <% @details.each do |d| %>
      <% @vends.each do |v| %>
        <tr>        
          <td><%= d.product %></td>
          <td><%= d.brand %></td>
          <td><%= d.details %></td>
          <td><%= i.price %></td>
          <td><%= v.name %></td>
          <td><%= v.address %></td>
          <td><%= button_to "Delete", {:controller => :list_items, 
                        :action => 'destroy', 
                        :id => l.id}, 
                        :method => :delete %></td>
        </tr>
      <% end %>
    <% end %>
  <% end %>
<% end %>

这目前将我想要查看的行复制了 4 倍(大概是因为我有 4do个块正在进行,并且没有正确使用它们来实现我的目标。关于如何使这项工作以及我do错了什么的任何提示(抱歉无法帮助自己)?也愿意接受有关如何比我使用 4 个变量的愚蠢方式更干净地执行此操作的建议?提前致谢!

4

2 回答 2

2

所以我从中得到的是你有这 4 个你想一次迭代的列表?如果这是问题,请执行以下操作:

<% 0.upto(@list_items.count) do |i| %>
  <tr>        
     <td><%= @details[i].product %></td>
     <td><%= @details[i].brand %></td>
     <td><%= @details[i].details %></td>
     <td><%= @i_items[i].price %></td>
     <td><%= @vends[i].name %></td>
     <td><%= @vends[i].address %></td>
     <td><%= button_to "Delete", {:controller => :list_items, 
                    :action => 'destroy', 
                    :id => @list_items[i].id}, 
                    :method => :delete %></td>
  </tr>
<% end %>

这是假设所有数组的长度相同并且顺序没有改变。这不是一个真正安全的想法,重新设计模型可能值得研究。

于 2013-08-22T21:52:30.510 回答
1

感谢@kristenmills 的建议,我有点意识到我有必要的关联来用下面的代码真正干净地做到这一点。如果我发布了我的所有关联并提供更多背景信息,可能有人会指出这一点。

<% @list_items.each do |l| %>
<tr>
        <td><%= l.item.product %></td>
        <td><%= l.item.brand %></td>
        <td><%= l.item.details %></td>
        <td><%= l.inventory_item.price %></td>
        <td><%= l.inventory_item.vendor.name %></td>
        <td><%= l.inventory_item.vendor.address %></td>
        <td><%= button_to "Delete", {:controller => :list_items, 
                        :action => 'destroy', 
                        :id => l.id}, 
                        :method => :delete %></td>
</tr>
<% end %>
于 2013-08-23T14:39:32.400 回答