我有一个包含两个字段的表单,第二个字段取决于第一个下拉列表中选择的内容,如果我在第一个下拉列表中选择“亚洲”,则“日本”和“中国”在第二个下拉列表中显示为选项。 / p>
.field
= f.label :country
= f.select :country, ['Asia', 'Europe'], :prompt => 'Select One'
.field
= f.label :category
= f.select :category,grouped_options_for_select(MyModel::CATEGORIES, nil, "Please Select")
CATEGORIES变量看起来像;
CATEGORIES = {
'Asia'=> [ 'Japan','China'],
'Europe'=> [ 'Ireland', 'France']
}
这样可行但是当我进入编辑页面时,第二个下拉列表没有预先填充存储的值,我该怎么做?
答案 0 :(得分:5)
@dax是正确的,但您需要显式设置所选值而不仅仅是属性。来自api
selected_key - 一个值等于其中一个标记的值属性,该属性将设置所选属性。注意:此值可以匹配多个选项,因为您可能在多个组中具有相同的选项。然后每个人都会被选中=“被选中”。
您的代码应为
= f.select :category, grouped_options_for_select(MyModel::CATEGORIES, f.object.category)
修改强>
传递给grouped_options_for_select
的最后一个参数应该传递给select
,而应该是prompt
或include_blank
选项的值。
= f.select :category,
grouped_options_for_select(MyModel::CATEGORIES, f.object.category),
{ prompt: 'Please select' }, # here goes the select tag options
{ class: 'my-class' } # here goes the html options
答案 1 :(得分:0)
您已将selected key设置为nil
-
MyModel::CATEGORIES, # nil #, "Please Select"
尝试将代码更改为:
= f.select :category,grouped_options_for_select(MyModel::CATEGORIES, :country, "Please Select")