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] } %>