ruby-on-rails Rails edit.html.erb表单没有为空的select选项预加载输入数据

q0qdq0h2  于 4个月前  发布在  Ruby
关注(0)|答案(2)|浏览(61)

我有一个rails应用程序,它有两个表单来编辑同一个表,第一个表单是new.html.erb,里面是基本信息,用文本字段填充,第二个表单是edit.html.erb,它和第一个表单类似,但是增加了一些options_for_select字段。
如果用户尚未将此信息添加到表中,我希望选择字段的选项具有空值的默认选择。如果用户已保存此信息,则应预先选择该选项。
然而,每当我向这些字段添加空值选项时,信息会保存到数据库中,但下次数据不会显示为预选选项。
以下是我尝试过的两种方法:

<%= f.select( :attribute1, options_for_select( 
    [
      ["Select your attribute", "", { disabled: true }],
      ["option1", "option1"],
      ["option2","option2"]
    ],""))
%>

字符串

<%= f.select( :attribute1, options_for_select( 
    [
      ["Select your attribute", ""],
      ["option1", "option1"],
      ["option2","option2"]
    ],""))
%>


这两种情况都会导致数据被保存到数据库中,但在刷新时不会显示在表单中。但是,以下代码会在刷新时显示数据:

<%= f.select( :attribute1, options_for_select( 
    [
      ["option1", "option1"],
      ["option2","option2"]
    ],""))
%>


然而,这一个的问题是,如果用户还没有保存任何东西,option1是第一个选择,这是我不希望的,因为如果用户不小心绕过这个问题,他们应该得到一个验证错误,告诉他们它是空的,但是使用这个代码,一个选项被预先选择为默认值,而不是空选项。

2cmtqfgy

2cmtqfgy1#

options_for_select生成实际选项标记:

>> puts helper.options_for_select([["Select your attribute", ""], ["option1", "option1"], ["option2","option2"]]) 
<option value="">Select your attribute</option>
<option value="option1">option1</option>
<option value="option2">option2</option>

字符串
您必须指定选择哪个选项作为第二个参数:

>> options = [["Select your attribute", ""], ["option1", "option1"], ["option2","option2"]]
>> puts helper.options_for_select(options, "option1")
#                                          ^^^^^^^^^
<option value="">Select your attribute</option>
<option selected="selected" value="option1">option1</option> # <=
<option value="option2">option2</option>


或者只传递一个数组给select

<%= f.select :attribute1,
  [
    ["option1", "option1"],
    ["option2", "option2"]
  ],
  include_blank: "Select your attribute"
%>

# if value and name are the same
<%= f.select :attribute1,
  ["option1", "option2"],
  include_blank: "Select your attribute"
%>

ssm49v7z

ssm49v7z2#

你可以在你的option_select中添加incude_blank,它会添加一个第一个可见的行,这样用户就知道他们需要选择一个选项,在编辑时你可以从params中传递默认值,

<%= f.select( :attribute1, options_for_select( 
    [
      ["option1", "option1"],
      ["option2","option2"]
    ],(params[:attribute1])),{ include_blank: "--Select your attribute--" }
%>

字符串

相关问题