Rails groups_options_for_select没有填充编辑操作

rap*_*tle 1 forms ruby-on-rails ruby-on-rails-4

我有一个有两个字段的表单,其中第二个取决于第一个下拉列表中选择的内容,如果我在第一个下拉列表中选择"亚洲",那么"日本"和"中国"在第二个下拉列表中显示为选项.

    .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")
Run Code Online (Sandbox Code Playgroud)

CATEGORIES变量看起来像;

CATEGORIES = {
    'Asia'=> [ 'Japan','China'],
    'Europe'=> [ 'Ireland', 'France']
    }
Run Code Online (Sandbox Code Playgroud)

这有效,但当我进入编辑页面时,第二个下拉列表没有预先填充存储的值,我该怎么做?

jvn*_*ill 5

@dax是正确的,但您需要显式设置所选值而不仅仅是属性.来自api

selected_key - 一个值等于其中一个标记的value属性,它将具有所选的属性集.注意:此值可以匹配多个选项,因为您可能在多个组中具有相同的选项.然后每个将被选中="选中".

你的代码应该是

= f.select :category, grouped_options_for_select(MyModel::CATEGORIES, f.object.category)
Run Code Online (Sandbox Code Playgroud)

编辑

传递给的最后一个参数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
Run Code Online (Sandbox Code Playgroud)