我正在尝试显示组名称(product_group),然后显示每个组中的项目(产品)。
<% @products.group_by(&:product_group_id).each do |s|%>
<!--need to get group name here ->
<% s[1].each do |d|%>
<%= d.product_name%>
<br>
<%end%>
<%end%>
rails 2.3.8
答案 0 :(得分:2)
首先,我强烈建议您在块中使用两个变量。当您使用一个变量时,group_by将变量设置为应该设置为两个变量的值对的数组。代码要比用该组的[1]编制索引要清晰得多。
一种方法是该对的第一部分将是id,因此您可以进行查找。
<% @products.group_by(&:product_group_id).each do |product_group_id, products|%>
<!--need to get group name here -->
<%= ProductGroup.find(product_group_id).name %>
<% products.each do |product|%>
<%= product.product_name%>
<br>
<% end %>
<% end %>
另一种方法是,由于您在组中至少有一个产品数组,您可以在数组的第一个元素上调用product_group关联。
<% @products.group_by(&:product_group_id).each do |product_group_id, products|%>
<!--need to get group name here -->
<%= products[0].product_group.name %>
<% products.each do |product|%>
<%= product.product_name%>
<br>
<% end %>
<% end %>
您也可以将名称委托给产品组。
class Product
belongs_to :product_group
delegate :name, :to => :product_group, :prefix => true, :allow_nil => true
end
<%= products[0].product_group_name %>
答案 1 :(得分:0)
在块声明中需要两个变量。第一个用于分组的东西,第二个用于保存每个组中的东西。
<% @products.group_by(&:product_group_id).each do |group_id, group_products| %>
Group ID: <%= group_id %>
<br>
Products:
<% group_products.each do |product| %>
<%= product.product_name %>
<% end %>
<% end %>