Rails select helper - 默认选中的值,如何?

tot*_*ter 178 ruby-on-rails

这是我现在使用的一段代码:

<%= f.select :project_id, @project_select %>
Run Code Online (Sandbox Code Playgroud)

如何修改它使其默认值等于params[:pid]页面加载时?

hta*_*ata 215

这应该这样做:

<%= f.select :project_id, @project_select, :selected => params[:pid] %>
Run Code Online (Sandbox Code Playgroud)

  • 没有参数,`options_for_select`是更好的方法.它适用于任何情况,也适用于表单编辑. (4认同)

小智 124

使用当前实例的正确属性(例如@work.project_id):

<%= f.select :project_id, options_for_select(..., @work.project_id) %>
Run Code Online (Sandbox Code Playgroud)

  • 你也可以尝试`options_for_select(...,f.object.project_id)` (6认同)
  • 这是最好的答案,因为它也适用于`select_tag`.谢谢它真的帮助了我. (4认同)

Che*_*eng 51

Rails 3.0.9

select options_for_select([value1, value2, value3], default)
Run Code Online (Sandbox Code Playgroud)

  • 这是我在Rails 4.0.1中的正确答案 (2认同)

Mik*_*any 32

所有这些答案的问题是,即使您正在尝试编辑记录,它们也会将字段设置为默认值.

您需要将默认值设置为现有值,然后在没有值时将其设置为实际默认值.像这样:

f.select :field, options_for_select(value_array, f.object.field || default_value)
Run Code Online (Sandbox Code Playgroud)

对于不熟悉f.object.field您的人,请始终使用,f.object然后在其末尾添加您的字段名称.

  • 这是一个干净的解决方案,如上所述,您只想在new上设置默认值,在编辑时设置当前值. (3认同)

gav*_*vit 21

试试这个:

    <%= f.select :project_id, @project_select, :selected => f.object.project_id %>
Run Code Online (Sandbox Code Playgroud)


dan*_*gle 10

如果params [:pid]是一个字符串,如果它来自一个表单,那么,你可能需要使用它

params[:pid].to_i  
Run Code Online (Sandbox Code Playgroud)

在选择列表中选择正确的项目


tot*_*ter 9

我找到了解决方案,我发现我在RoR方面很缺乏经验.

在管理上述视图的控制器内添加:

@work.project_id = params[:pid] unless params[:pid].nil?
Run Code Online (Sandbox Code Playgroud)


jsc*_*orr 6

<%= f.select :project_id, @project_select, :selected => params[:pid] %>
Run Code Online (Sandbox Code Playgroud)


She*_*acu 5

我无法让它工作,并发现我不仅需要将“selected”html 属性添加到正确的<option>标签中,而且需要添加到<select>标签中。MDN 关于 select 标签的 selected 属性的文档说:

selected - 布尔属性指示可以初始选择特定选项。

这意味着代码应该如下所示:

f.select :project_id, options_for_select(@project_select, default_val), html: {selected: true}
Run Code Online (Sandbox Code Playgroud)