3

私は一般的に中級プログラマーであるrailsにかなり慣れていませんが、できる限り明確にするように努めます。

カテゴリというフィールドを所有するProductsのデータベーステーブルがあります。カテゴリには、Category1とCategory 2という2つの可能な値があります。目標は、すべての製品を取得し、カテゴリ別に整理されたHTMLで表示することです。私はこの仕事をすることができますが、もっと良い方法がなければならないことを私は知っています。

今の私の方法は、次のように製品を入手することです。

@category1_products = Product.all(conditions: { category: "Category1" })
@category2_products = Product.all(conditions: { category: "Category2" })

次に、次のようなデータを出力します。

<table>
<tr>
  <td>Category1 Name</td>
<% @category1_products.each do |product| %>
  <td><%= product.name %></td>
  <td><%= product.description %></td>
  <td><%= product.price %></td>
<% end %>
</tr>
<tr>
  <td>Category2 Name</td>
<% @category2_products.each do |product| %>
  <td><%= product.name %></td>
  <td><%= product.description %></td>
  <td><%= product.price %></td>
<% end %>
</tr>
</table>

これを単一のインスタンスを使用して実現したいと思います。すべての製品を一度に取得し、カテゴリ別にグループ化してから、一度に1つのカテゴリ(カテゴリ名を含む)をループして出力します。これは私にはかなり基本的な概念のように思えますが、頭を悩ませています。

4

2 に答える 2

1

Railsのgroup_byは、このタイプの問題に最適です。

@grouped_products = Product.all.group_by(&:category)

次に、ビューで、ループし@grouped_productsます。

<table>
  <tr>
  <% @grouped_products.each do |category, products| %>
    <td><%= category %></td>
    <% products.each do |product| %>
      <td><%= product.name %></td>
      <td><%= product.description %></td>
      <td><%= product.price %></td>
    <% end %>
  <% end %>
  </tr>
</table>
于 2012-10-24T00:03:10.013 に答える
1
@products_by_category = Product.all.group_by(&:category)

これは、含まれるオブジェクトの条件に基づいて配列をハッシュに変換する Ruby (読み取り: ActiveRecord ではない) メソッドです。

ビューで (カテゴリごとに 1 行ではなく、productごとに 1 行が必要であると仮定します):

<table>
  <% @products_by_category.each do |category,products| %>
    <tr>
      <th><%= category %></th>
    </tr>
    <% products.each do |product| %>
      <tr>
        <td><%= product.name %></td>
        <td><%= product.description %></td>
        <td><%= product.price %></td>
      </tr>
    <% end %>
  <% end %>
</table>
于 2012-10-24T00:03:41.987 に答える