我正在尝试在管理员面板上显示属于某个订单的每个产品的名称,但我似乎无法得到它。
这是我的协会:
OrderItem belongs_to :product
OrderItem belongs_to :order
Product has_many :order_items
Order has_many :order_items
我尝试了两件不同的事情:
<tbody>
<% @orders.each do |order| %>
<tr>
<td><%= order.id %></td>
<td><%= order.order_items.product.name %></td>
<td><%= order.total %></td>
</tr>
<% end %>
</tbody>
这给我带来了这个错误:
undefined method `name' for #<Array:0x0000000535fbb0>
然后我尝试像这样循环:
<tbody>
<% @orders.each do |order| %>
<tr>
<td><%= order.id %></td>
<% order.order_items each do |order_item| %>
<% order_item.products each do |product| %>
<td><%= product.name %></td>
<% end %>
<% end %>
<td><%= order.total %></td>
</tr>
<% end %>
</tbody>
我收到了这个错误:
undefined local variable or method `each' for <Class:0x007fce540aa3f0>:0x007fce5417fed8>
这是我的控制器代码:
def orders
@orders = Order.all
@order_items = OrderItem.all
@products = Product.all
end
我不知道我哪里出错了任何帮助都会受到赞赏,谢谢。
答案 0 :(得分:1)
你可以用你建议的任何一种方式做到这一点:只关注你的收藏品和物品
这个项目会将您的所有项目放在一个<td>
<tbody>
<% @orders.each do |order| %>
<tr>
<td><%= order.id %></td>
<td><%= order.order_items.map{ |o| o.product.name }.join(', ') %></td>
<td><%= order.total %></td>
</tr>
<% end %>
</tbody>
此处,每个order_item
都有自己的<td>
<tbody>
<% @orders.each do |order| %>
<tr>
<td><%= order.id %></td>
<% order.order_items each do |order_item| %>
<td><%= order_item.product.name %></td>
<% end %>
<td><%= order.total %></td>
</tr>
<% end %>
</tbody>
您可以考虑在模型中长期添加一些has_many through
或delegate
关系 - 这会使这种关联更加整洁。