Railsselect助手 – 默认select的值,如何?

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

<%= f.select :project_id, @project_select %> 

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

这应该做到这一点:

 <%= f.select :project_id, @project_select, :selected => params[:pid] %> 

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

 <%= f.select :project_id, options_for_select(..., @work.project_id) %> 

Rails 3.0.9

 select options_for_select([value1, value2, value3], default) 

与所有这些答案的问题是,即使您正在尝试编辑您的logging,他们将字段设置为默认值。

您需要将默认值设置为您的现有值,如果没有值,则只需将其设置为实际的默认值即可。 像这样:

 f.select :field, options_for_select(value_array, f.object.field || default_value) 

对于不熟悉f.object.field你总是使用f.object然后把你的字段名添加到结尾。

尝试这个:

  <%= f.select :project_id, @project_select, :selected => f.object.project_id %> 

我find了解决办法,发现我在RoR方面还没有经验。

在上面描述的pipe理视图的控制器内部添加这个:

 @work.project_id = params[:pid] unless params[:pid].nil? 

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

 params[:pid].to_i 

在select列表中select正确的项目

 <%= f.select :project_id, @project_select, :selected => params[:pid] %> 
 <%= f.select :project_id, options_from_collection_for_select(@project_select,) %> 

我无法得到这个工作,发现我需要添加“选定”的HTML属性不仅要正确的<option>标签,而且要添加到<select>标签。 MDN关于select标签的选定属性的文档说:

selected – 布尔属性表示可以初始select一个特定的选项。

这意味着代码应该是这样的:

 f.select :project_id, options_for_select(@project_select, default_val), html: {selected: true} 

或者,您可以在控制器中设置:project_id属性,因为f.select的第一个参数会引用该特定属性。

如果试图打印f对象,那么你会看到有f.object可以被探测到获得选定的项目(适用于所有rails版本> 2.3)

 logger.warn("f #{f.object.inspect}") 

所以,请使用以下脚本来获取正确select的选项:

 :selected => f.object.your_field 

它已经解释过了,会试着举个例子

让select列表

 select_list = { eligible: 1, ineligible: 0 } 

所以下面的代码结果

 <%= f.select :to_vote, select_list %> <select name="to_vote" id="to_vote"> <option value="1">eligible</option> <option value="0">ineligible</option> </select> 

所以为了使选项默认选中,我们必须使用selected:值

 <%= f.select :to_vote, select_list, selected: select_list.can_vote? ? 1 : 0 %> 

如果can_vote? 返回true它设置select:1然后第一个值将被选中其他秒。

 select name="driver[bca_aw_eligible]" id="driver_bca_aw_eligible"> <option value="1">eligible</option> <option selected="selected" value="0">ineligible</option> </select> 

如果select选项只是一个数组列表而不是hast,那么选中的将只是要select的值,例如if

 select_list = [ 'eligible', 'ineligible' ] 

现在select将采取

 <%= f.select :to_vote, select_list, selected: 'ineligible' %> 

这应该适合你。 它只是将{:value => params[:pid] }传递给html_optionsvariables。

 <%= f.select :project_id, @project_select, {}, {:value => params[:pid] } %>