Возможна ли двухслойная модель в Ruby on Rails?

Вот список товаров, упорядоченных по цвету:

КРАСНЫЙ

Продукт красный 1 Продукт красный 2 Продукт красный3

СИНИЙ

Продукт синий 1

ЖЕЛТЫЙ

Продукт Желтый 1

Для этого я должен различать продукты в контроллере:

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

Но в представлении, как мне с этим справиться?

я думаю, у меня будут _colorproduct.erb и _colorproductdetail.erb.

Как называется такой вид двойной петли? Это выполнимо в рельсах?


person Syl    schedule 02.11.2011    source источник


Ответы (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 %>

Модифицируйте на досуге.

person Aditya Sanghi    schedule 02.11.2011

Короткое имя «сломано», потому что вы постоянно переназначаете @productscolor ;)

Вам нужен хэш с цветом в качестве ключа и списком продуктов этого цвета в качестве значения.

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

Затем используйте частичную коллекцию для продуктов каждого цвета.

person Dave Newton    schedule 02.11.2011