我有一组属于产品的属性,例如:name
,:smalls
,:mediums
,:larges
,:price
等。
右: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>
如何使用数字而不是数组的大小来确定部分渲染的次数?
我试过这样做:
{ ...
:smalls => [1],
:mediums => [2],
:larges => [1],
...
}
但那没用。
答案 0 :(得分: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 :(得分:1)
为什么是阵列?
:smalls => 1,
然后
<% product[:smalls].times %>
<%= render :partial => 'small', :locals => {:product => product } %>
<% end %>