2013-12-11 3 views
0

У меня есть набор атрибутов, принадлежащих продукту, например. :name, :smalls, :mediums, :larges, :price и т.д.Оказание частичного N раз вместо каждого элемента в массиве

правой :smalls, :mediums и :larges являются массивы строк:

@products = [ 
    { :id => 1, 
    :name  => 'Product 1', 
    :description => 'description goes here', 
    :smalls => ['S'], 
    :mediums => ['M','M'], 
    :larges => ['L',], 
    :price => 50.0, 
    :names_and_numbers => 'optional' 
    } 
] 

Число строк в каждом массиве определяет количество раз, соответствующее частичных :

<div id="small-field-set"> 
<% product[:smalls].each do |small| %> 
    <%= render :partial => 'small', :locals => { :product => product, :small => small } %> 
<% end %> 
</div> 

<div id="medium-field-set"> 
<% product[:mediums].each do |medium| %> 
    <%= render :partial => 'medium', :locals => { :product => product, :medium => medium } %> 
<% end %> 
</div> 

<div id="large-field-set"> 
<% product[:larges].each do |large| %> 
    <%= render :partial => 'large', :locals => { :product => product, :large => large } %> 
<% end %> 
</div> 

Как я могу получить число, а не размер массива, определить, как ma Сколько раз обрабатываются частичные?

Я попытался сделать это:

{ ... 
    :smalls => [1], 
    :mediums => [2], 
    :larges => [1], 
    ... 
} 

Но это не сработало.

ответ

2

Когда вы сделаете это ...

{ ... 
    :smalls => [1], 
    ... 
} 

... вы все еще есть массив: [1] массив с одним элементом, целое число 1 (точно так же, как [1, 2] - массив с двумя элементами). Поэтому первое, вы хотите избавиться от массивов:

{ ... 
    :smalls => 1, 
    :mediums => 2, 
    :larges => 1, 
    ... 
} 

Для вашего зрения, когда вы используете each вы говорите, «сделать это один раз для каждого элемента в массиве.» Так как теперь у вас есть целый ряд, а не массив, вы можете использовать times, который, так же, как это звучит, значит «сделать это N раз»:

<div id="small-field-set"> 
<% product[:smalls].times do %> 
    <%= render :partial => 'small', :locals => { :product => product, :small => "S" } %> 
<% end %> 
</div> 

P.S. Я не уверен, что цель :small в хеше :locals. Поскольку ваш частичный номер называется 'small', я предполагаю, что вам это не нужно, или вы можете легко изменить частичное, чтобы избавиться от него.

1

Почему массив?

:smalls => 1, 

Тогда

<% product[:smalls].times %> 
    <%= render :partial => 'small', :locals => {:product => product } %> 
<% end %> 
Смежные вопросы