我对rails很新,一般是一名中级程序员,但我会尽量清楚。
我有一个Products数据库表,它拥有一个名为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>
我想使用单个实例来完成此操作:立即获取所有产品,按类别对它们进行分组,然后通过一次循环一个类别(包括类别名称)来输出它们。这对我来说似乎是一个非常基本的概念,但我无法理解它。
答案 0 :(得分: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>
答案 1 :(得分:1)
@products_by_category = Product.all.group_by(&:category)
这是一个Ruby(读取:非ActiveRecord)方法,根据它包含的对象的某些条件将数组转换为哈希。
在您的视图中(假设您希望每个产品一行,而不是每个类别一行):
<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>