我正在构建发票申请,并在_form
部分我发了一张发票,用户可以在其中添加产品,包括数量,描述和单价。用户可以添加额外的行来添加更多项目(产品)。
现在,当我尝试在show视图中显示这些信息时:
<tbody>
<tr class="products_tr">
<td> <%= @invoice.products.quantity %> </td>
<td> <%= @invoice.products.description %> </td>
<td> <%= @invoice.products.unitprice %> </td>
<td class="row_total"><%= @invoice.products.quantity * @invoice.products.unitprice %></td>
<td> <%= @invoice.products.btw %> </td>
</tr>
</tbody>
它会发出下一个错误:
undefined method `quantity' for #<Product::ActiveRecord_Associations_CollectionProxy:0x007fbe92831500>
这是控制器中的代码;
def show
@invoice.products.build
@invoice.build_customer
end
有关如何解决此问题的任何想法?帮助将不胜感激。还有一些要点可以解释我做错了什么。
修改
如果我循环通过@ invoice.products像MichałMłoźniak说它可以工作,但它还显示一个包含nil的额外行,如下所示:
答案 0 :(得分:1)
你自己说发票可以有很多产品,所以你需要一个循环来迭代这个产品列表。
<tbody>
<% @invoice.products.each do |product| %>
<% if product.persisted? %>
<tr class="products_tr">
<td> <%= product.quantity %> </td>
<td> <%= product.description %> </td>
<td> <%= product.unitprice %> </td>
<td class="row_total"><%= product.quantity * product.unitprice %></td>
<td> <%= product.btw %> </td>
</tr>
<% end %>
<% end %>
</tbody>
答案 1 :(得分:0)
您的@invoice.products
是一个集合,您应该在该集合中的每个对象上调用quantity
。