2012-10-23 41 views
3

我是相當新的軌道,一般的中間程序員,但我會盡力讓我儘可能清楚。試圖不要重複自己與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> 

我想用一個實例實現這一點:獲得所有產品一次按類別分組,然後通過一次循環一個類別(包括類別名稱)輸出它們。這對我來說似乎是一個非常基本的概念,但我無法繞過它。

回答

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> 
+0

謝謝,這正是我想知道的。 – spencer

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> 
+0

謝謝,我的確嘗試創建一個與其關聯的多個產品行的單個類別行。 – spencer