3

我对 Rails 相当陌生,一般来说是一名中级程序员,但我会尽量做到清楚。

我有一个 Products 的数据库表,它拥有一个名为 category 的字段。Category 有两个可能的值,分别称为 Category1 和 Category 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>

我想使用单个实例来完成此操作:一次获取所有产品,按类别对它们进行分组,然后通过一次循环一个类别(包括类别名称)来输出它们。这对我来说似乎是一个非常基本的概念,但我很难理解它。

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)方法,用于根据它包含的对象的某些条件将 Array 转换为 Hash。

在您看来(假设您希望每个product一行,而不是每个category一行):

<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 回答