我有一个has_many关联,我想在表格中显示。每个代理最多可以进行3次销售,但我想将它们列在与代理相同的行中。
undefined method `each' for nil:NilClass on the <% sales.each do |s| %> line.
虽然每列都有明确的数据,但我收到了上述错误
<table>
<tr>
<td>Agent</td>
<td>Date</td>
<td>Product</td>
<td>Price</td>
<td>Date</td>
<td>Product</td>
<td>Price</td>
<td>Date</td>
<td>Product</td>
<td>Price</td>
</tr>
<% @agent.sales.each do |agent, sales| %>
<tr>
<td><% agent.name %></td>
<% sales.each do |s| %>
<td><%= s.date %></td>
<td><%= s.product %></td>
<td><%= s.price %></td>
<% end %>
</tr>
<% end %>
</table>
答案 0 :(得分:1)
这应该有效:
<table>
<tr>
<td>Agent</td>
<td>Date</td>
<td>Product</td>
<td>Price</td>
<td>Date</td>
<td>Product</td>
<td>Price</td>
<td>Date</td>
<td>Product</td>
<td>Price</td>
</tr>
<% @agent.sales.each do |sale| %>
<tr>
<td><% @agent.name %></td>
<td><%= sale.date %></td>
<td><%= sale.product %></td>
<td><%= sale.price %></td>
</tr>
<% end %>
</table>
答案 1 :(得分:1)
首先,由于@agent.sales
是ActiveRecord_Associations_CollectionProxy
,您可以将此对象视为数组,而不是哈希。
你最初是如何编写循环的,看起来你把它当作哈希:
@agent.sales.each do |agent, sale|
&gt;这个语法是针对哈希中的每个键值对,使用键(agent
)和值(sale
)执行某些操作。
第二次尝试运行循环时,您需要在&#34;值&#34;上运行它。迭代器的一部分,它不存在,因此行sales.each do |sale|
真的,你非常接近,但正在过度思考它。只需放下第一个迭代器并保留其余部分:
<tr>
<td><% @agent.name %></td>
<% @agent.sales.each do |s| %>
<td><%= s.date %></td>
<td><%= s.product %></td>
<td><%= s.price %></td>
<% end %>
</tr>
顺便说一句,您也可以应用相同的原则并重构标题:
<tr>
<td>Name</td>
<% 3.times do |n| %>
<td>Date</td>
<td>Product</td>
<td>Price</td>
<% end %>
</tr>
这假设您的约束是3个最大销售额。