0

我正在尝试显示组名称(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%>

导轨 2.3.8

4

2 回答 2

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 %>
于 2012-04-25T18:55:19.537 回答
0

Group by 在块声明中需要两个变量。第一个用于您分组的事物,第二个用于保存每个组中的事物。

<% @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 %>
于 2012-04-25T18:42:36.163 回答