Answers:
使用当前实例的right属性(例如@work.project_id
):
<%= f.select :project_id, options_for_select(..., @work.project_id) %>
select_tag
。谢谢,它也确实帮助了我。
options_for_select(..., f.object.project_id )
所有这些答案的问题在于,即使您尝试编辑记录,它们也会将字段设置为默认值。
您需要将默认值设置为现有值,然后仅在没有值的情况下才将其设置为实际默认值。像这样:
f.select :field, options_for_select(value_array, f.object.field || default_value)
对于任何不熟悉f.object.field
您的人,请始终使用,f.object
然后在其末尾添加您的字段名称。
select2
JS插件。如果您要创建或编辑具有相同格式并使用select2的记录,尤其是占位符文本,则可以完美地工作。
试试这个:
<%= f.select :project_id, @project_select, :selected => f.object.project_id %>
params[:pid]
不能正常工作,但是您的示例可以正常工作。
如果params [:pid]是一个字符串,如果它来自表单,则可能需要使用
params[:pid].to_i
在选择列表中选择正确的项目
@project
用数据库表中的ID(而不是标题)填充变量后,此代码便附加在form.select
助手的后面:selected: @project
谢谢@danengle
我无法使它正常工作,发现我不仅需要将“ selected” html属性添加到正确的<option>
标签,而且还需要添加到<select>
标签。MDN关于select标记的selected属性的文档说:
selected-布尔值属性指示可以初始选择特定选项。
这意味着代码应如下所示:
f.select :project_id, options_for_select(@project_select, default_val), html: {selected: true}
另外,您可以在控制器中设置:project_id属性,因为f.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:value。
<%= f.select :to_vote, select_list, selected: select_list.can_vote? ? 1 : 0 %>
如果可以 如果返回true,则它设置为selected: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>
如果选择选项只是一个数组列表而不是hast,则被选择的将只是要选择的值,例如
select_list = [ 'eligible', 'ineligible' ]
现在选择的只是
<%= f.select :to_vote, select_list, selected: 'ineligible' %>
Mike Bethany的上述回答是在创建新记录时设置默认值,并且仍将用户选择的值显示在编辑表单中。但是,我添加了模型验证,但不允许我提交表单。这是在现场进行模型验证并显示默认值以及用户在编辑模式下选择的值的方法。
<div class="field">
<%= f.label :project_id, 'my project id', class: "control-label" %><br>
<% if @work.new_record? %>
<%= f.select :project_id, options_for_select([['Yes', true], ['No', false]], true), {}, required: true, class: "form-control" %><br>
<% else %>
<%= f.select :project_id, options_for_select([['Yes', true], ['No', false]], @work.project_id), {}, required: true, class: "form-control" %><br>
<% end %>
</div>
模型验证
validates :project_id, presence: true
这应该为您工作。它只是传递{:value => params[:pid] }
给html_options变量。
<%= f.select :project_id, @project_select, {}, {:value => params[:pid] } %>