下面是我正在使用的一段代码:
<%= f.select :project_id, @project_select %>
如何修改它,使它的默认值等于加载页面时的params[:pid]?
params[:pid]
这应该对你有用。它只是将{:value => params[:pid] }传递给HTML_选项变量。
{:value => params[:pid] }
<%= f.select :project_id, @project_select, {}, {:value => params[:pid] } %>
我已经找到了解决方案,我发现我在RoR方面相当缺乏经验。
在管理上述视图的控制器中,添加以下内容:
@work.project_id = params[:pid] unless params[:pid].nil?
这应该可以做到:
<%= f.select :project_id, @project_select, :selected => params[:pid] %>
如果params[:PID]是一个字符串(如果它来自窗体),则可能需要使用
params[:pid].to_i
用于在选择列表中选择正确的项目
使用当前实例的right属性(例如__abc0):
<%= f.select :project_id, options_for_select(..., @work.project_id) %>
轨道3.0.9
select options_for_select([value1, value2, value3], default)
试试这个:
<%= f.select :project_id, @project_select, :selected => f.object.project_id %>
<%= f.select :project_id, options_from_collection_for_select(@project_select,) %>
所有这些答案的问题在于,即使您尝试编辑记录,它们也会将字段设置为默认值。
您需要将默认值设置为现有值,然后唯一的,如果没有值,则将其设置为实际默认值。像这样:
f.select :field, options_for_select(value_array, f.object.field || default_value)
对于不熟悉f.object.field的人,请始终使用f.object,然后在其末尾添加您的字段名称。
f.object.field
f.object
或者,您可以在控制器中设置:project_ID属性,因为f.select的第一个参数会提取该特定属性。
如果尝试打印F对象,那么您将看到可以探测F对象以获取所选项目(适用于所有Rails版本>2.3)。
logger.warn("f #{f.object.inspect}")
因此,请使用以下脚本获取正确的选定选项:
:selected => f.object.your_field
它已经解释过了,我会试着举个例子。
假设选择列表为
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>
因此,要使一个选项被默认选中,我们必须使用选定:值。
<%= f.select :to_vote, select_list, selected: select_list.can_vote? ? 1 : 0 %>
如果_可以投票吗?返回真,则设置已选择: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,则SELECTED将只是要选择的值,例如如果
select_list = [ 'eligible', 'ineligible' ]
现在选定的将只采取
<%= f.select :to_vote, select_list, selected: 'ineligible' %>
我无法让它工作,并且发现我不仅需要将“ selected ” HTML属性添加到正确的<option>标记,还需要将也添加到<select>标记。选择标记的选定属性上的MDN文档表示:
<option>
<select>
已选定-布尔属性表示最初可以选择的特定选项。
这意味着代码应该如下所示:
f.select :project_id, options_for_select(@project_select, default_val), html: {selected: true}
上面MikeBethany的回答在创建新记录时设置了一个默认值,并且在编辑表单中仍然显示用户选择的值。但是,我添加了一个模型验证,它不允许我提交表单。下面是我在字段上进行模型验证并显示默认值以及用户在编辑模式下选择的值的方法。
<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