以下是按颜色订购的产品列表:
RED
产品红色1产品红色2产品红色3
BLUE
产品蓝色1
YELLOW
产品黄色1
要做到这一点,我必须区分控制器中的产品:
@productscolor={}
@products.each do |product|
@productscolor=[product.color][product]
end
但在视图中,我该如何管理呢?
我猜是_colorproduct.erb和_colorproductdetail.erb。
这种双循环视图的名称是什么?在轨道上可行吗?
答案 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
然后对每种颜色的产品使用部分集合。