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

时间:2009-03-08 11:49:43

标签: ruby-on-rails

以下是我正在使用的一段代码:

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

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

15 个答案:

答案 0 :(得分:210)

这应该这样做:

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

答案 1 :(得分:122)

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

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

答案 2 :(得分:49)

Rails 3.0.9

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

答案 3 :(得分:26)

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

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

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

对于不熟悉f.object.field的人,您总是使用f.object,然后将您的字段名称添加到其末尾。

答案 4 :(得分:21)

试试这个:

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

答案 5 :(得分:10)

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

params[:pid].to_i  

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

答案 6 :(得分:9)

我找到了解决方案,但我发现我对RoR缺乏经验。

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

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

答案 7 :(得分:6)

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

答案 8 :(得分:3)

我无法解决此问题,发现我需要将“已选择”的html属性不仅添加到正确的<option>标记,还将添加到{{1} } 标签。 MDN's docs on the selected attribute of the select tag说:

  

已选择 - 布尔属性表示最初可以选择特定选项。

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

<select>

答案 9 :(得分:2)

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

答案 10 :(得分:0)

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

答案 11 :(得分:0)

如果尝试打印f对象,那么您将看到有f.object可以被探测以获取所选项目(适用于所有rails版本&gt; 2.3)

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

因此,请使用以下脚本获取正确的选定选项:

:selected => f.object.your_field 

答案 12 :(得分:0)

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

让选择列表为

using

以下代码导致

select_list = { eligible: 1, ineligible: 0 }

因此,要默认选择一个选项,我们必须使用 selected:value

<%= f.select :to_vote, select_list %>

<select name="to_vote" id="to_vote">
  <option value="1">eligible</option>
  <option value="0">ineligible</option>
</select>

如果 can_vote?返回true,则设置选中:1 ,然后第二个值将被选中。

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

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

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_list = [ 'eligible', 'ineligible' ]

答案 13 :(得分:0)

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

答案 14 :(得分:-2)

这对你有用。它只是将{:value => params[:pid] }传递给html_options变量。

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