0

グループ名 (product_group) に続いて各グループのアイテム (product) を表示しようとしています。

<% @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

まず、ブロックで 2 つの変数を使用することを強くお勧めします。1 つの変数を使用する場合、group_by は変数を、2 つの変数として設定する必要がある値のペアの配列に設定します。グループの [1] でペアにインデックスを付けるよりも、はるかに明確なコードになります。

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 %>

別の方法として、グループ内に少なくとも 1 つの製品の配列があるため、配列の最初の要素で 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 は、ブロック宣言で 2 つの変数を必要とします。1 つ目はグループ化するもの用で、2 つ目は各グループ内のものを保持するものです。

<% @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 に答える