#ruby-on-rails #loops
#ruby-on-rails #циклы
Вопрос:
Вот список продуктов, упорядоченных по цвету :
КРАСНЫЙ
Product red 1 Product red 2 Product red3
Синий
Продукт синий 1
Желтый
Продукт Желтый 1
Для этого я должен различать продукты в контроллере :
@productscolor={}
@products.each do |product|
@productscolor=[product.color][product]
end
Но в представлении, как мне этим управлять?
я думаю, у меня будут _colorproduct.erb и _colorproductdetail.erb.
Как называется этот вид представления с двойным циклом? Выполнимо ли это в rails?
Ответ №1:
На самом деле вам нужна группа по перечислению
@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 %>
Модифицируйте на досуге.
Ответ №2:
Короткое имя «сломано», потому что вы продолжаете переназначать @productscolor 😉
Вам нужен хэш с цветом в качестве ключа и список продуктов этого цвета в качестве значения.
m = Hash.new([])
@products.each do |p|
m[p.color] << p
end
Затем используйте частичную коллекцию для продуктов каждого цвета.