循环迭代所有项目,每个项目

时间:2016-01-25 07:56:45

标签: ruby-on-rails

我遇到了一个问题,我使用AJAX对其进行了部分编写,出于某种原因public class ShortCut implement Parcelable{ //rest of code } 呈现了其中的产品数量。因此,如果有2个产品,它会遍历所有line_items 2次,导致它列出4个元素而不是2个。所以循环继续按行line_items中的产品数量计算。

line_items我有:

create.js.erb

和我的$('#shopping-cart').html("<%= escape_javascript render(@cart) %>");

_cart

问题出在<div id="shopping-cart"> <div id="shopping-cart-header"> </div> <div id="shopping-cart-items"> <table> <%= render cart.line_items %> <tr class="total-line"> <td colspan="2">Total</td> <td class="total-cell"><%= number_to_currency(cart.total_price, unit: '') %></td> </tr> </table> <%= button_to 'Empty cart', cart, method: :delete %> </div> <div id="shopping-cart-footer"> <%= link_to 'New order', new_order_path, class: 'btn btn-main btn-lg', data: { no_turbolink: true } %> </div> </div> 我想:

render cart.line_items

如果我现在添加了2个产品,它们就会显示两次:

<% @cart.line_items.each do |item| %>
  <% if line_item == @current_item %>
    <tr id="current-item">
  <% else %>
    <tr>
  <% end %>
    <td><%= item.quantity %> &times;</td>
    <td>
      <p><%= item.product.name %></p>
      <% if item.line_item_attributes.exists? %>
        <% item.line_item_attributes.each do |attribute| %>
          <i><%= attribute.product_attribute.name %></i>
        <% end %>
      <% end %>
    </td>
    <td class="item-price"><%= number_to_currency(item.total_price, unit: '') %></td>
  </tr>
<% end %>

任何人都知道发生了什么事吗?我的日志是:

1 × red shirt 490.00
1 × blue shirt 89.00
1 × red shirt 490.00
1 × blue shirt 89.00
Total   579.00

似乎渲染_line_items,然后呈现_cart(它再次包含line_items) - 这可能是个问题吗?

1 个答案:

答案 0 :(得分:2)

你是对的。当你致电render cart.line_items时,你正在渲染一个集合。引用Rails文档,

  

当您通过:collection选项将集合传递给partial时,将为集合中的每个成员插入一次partial:

<h1>Products</h1>
<%= render partial: "product", collection: @products %>

(这与您的render cart.line_items相同)
然后在部分内容中,您可以访问product(或您的案例中为line_item)局部变量,如下所示:

<p>Product Name: <%= product.name %></p>

所以:重写部分视图以表示具有相应line_item变量而不是集合的单个line_item。