2013-08-22 31 views
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 %> 

這個目前我複製想4X(大概是因爲我有4 do塊怎麼回事,我不能正常使用它們來實現我的目標,查看行。如何使這項工作有什麼建議和我是do -ing錯(抱歉不禁自己)?還打開建議關於如何做到這一點比我使用4個變量的愚蠢的方式做得更乾淨?提前致謝!

+0

這將是值得添加到您的問題,你的預期輸出是什麼。你想每個@ list_items'元素有一行嗎,每個'@ i_items'元素還是每個'@ details'元素? – Shadwell

回答

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

這是假設所有數組長度相同並且順序沒有改變。這不是一個真正安全的想法,重新設計模型可能是值得研究的問題。

+1

each_with_index在這裏可能比upto更有意義:'@list_items.each_with_index do | item,index |' – Kyle

+0

你說得對,可能不是個好主意。您對於重新設計模型的評論讓我意識到,我已經掌握了所有的關聯關係,以便對此做出明智的決定。我不需要我的控制器中的所有變量。我在下面的答案中提出了我認爲是一個很好的解決方案。 +1的建議和答案,謝謝。 – settheline

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