Ruby on Rails中是否可以使用双层模型?

时间:2011-11-02 16:51:12

标签: ruby-on-rails loops

以下是按颜色订购的产品列表:

RED

产品红色1产品红色2产品红色3

BLUE

产品蓝色1

YELLOW

产品黄色1

要做到这一点,我必须区分控制器中的产品:

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

但在视图中,我该如何管理呢?

我猜是_colorproduct.erb和_colorproductdetail.erb。

这种双循环视图的名称是什么?在轨道上可行吗?

2 个答案:

答案 0 :(得分: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 %>

随意修改。

答案 1 :(得分:1)

短名称是“破碎”,因为你不断重新分配@productscolor;)

您需要一个颜色为关键字的散列,以及该颜色的产品列表作为值。

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

然后对每种颜色的产品使用部分集合。