2011-11-02 43 views
0

這裏是一個顏色訂購產品的列表:Ruby on Rails中可以使用雙層模型嗎?

RED

產品紅1個產品紅2產品RED3

BLUE

產品藍1

黃色

產品黃1

要做到這一點我必須區分產品的控制器:

@productscolor={} 
@products.each do |product| 
    @productscolor=[product.color][product] 
end 

但在視圖中,如何管理呢?

我會有一個_colorproduct.erb和一個_colorproductdetail.erb我猜。

這種雙循環視圖的名稱是什麼?它在軌道上可行嗎?

回答

2

其實你需要的是通過枚舉組

@productscolor = @products.group_by{|x|x.color} 

這意味着你的@productscolor實例變量現在有

{"Yellow" => [Product1, Product2], "Red" => [Product3, Product4], ...} 

您可以將這個哈希數組的鍵排序和上取色然後在產品上渲染部分集合。在視圖 -

<% @productscolor.keys.sort.each do |color| %> 
    <%= color %> 
    <%= render :partial => 'colorproductdetail', :collection => @productscolor[color] %> 
<% end %> 

修改悠閒。

+0

+1,甚至更好。 –

1

的簡稱是「破」,因爲你不斷重新分配@productscolor;)

您需要的顏色和關鍵的是顏色作爲價值的產品列表的哈希值。

m = Hash.new([]) 
@products.each do |p| 
    m[p.color] << p 
end 

然後對每種顏色的產品使用集合部分。