我在使用grouped_options_for_select
填充选项组的Rails中的选择框时遇到一些困难。
我目前有3个实例变量,我想将这些变量添加到分组选择框的一个整个分组数组中。
例如,我有:
@fruits (which contains the object(s))
--- !ruby/object:Fruits
attributes:
id: 2
name: Banana
@veggies (which contains the object(s))
--- !ruby/object:Veggies
attributes:
id: 23
name: Celery
--- !ruby/object:Veggies
attributes:
id: 24
name: Carrots
@junk_food (which contains the object(s))
--- !ruby/object:Junk
attributes:
id: 11
name: Snickers
--- !ruby/object:Junk
attributes:
id: 12
name: Ice Cream
我的问题是:如何将这3个实例变量转换为分组选择,如:
<select>
<optgroup label="Fruits">
<option value="2">Banana</option>
</optgroup>
<optgroup label="Veggies">
<option value="23">Celery</option>
<option value="24">Carrots</option>
</optgroup>
<optgroup label="Junk">
<option value="11">Snickers</option>
<option value="12">Ice Cream</option>
</optgroup>
</select>
food_controller.erb
@fruits = Fruit.all
@veggies = Veggies.all
@junk_food = JunkFood.all
# Then, I'd create the array here using the items above?
我知道我应该使用grouped_items_for_select
,但我仍然遇到一堆错误,我不确定这样做的正确方法。
答案 0 :(得分:14)
grouped_options_for_select
方法确实是正确的方法。
由于您尚未提供代码,因此应该生成所需的分组选项:
grouped_options_for_select [['Fruits', @fruits.collect {|v| [ v.name, v.id ] }],
['Veggies', @veggies.collect {|v| [ v.name, v.id ] }],
['Junk', @junk_food.collect {|v| [ v.name, v.id ] }]]
可用于创建下拉列表:
select_tag 'Food', grouped_options_for_select(...)
或使用form_helper:
f.select :food_attribute, grouped_options_for_select(...)