Rails collection_select默认选择

时间:2014-10-08 01:37:33

标签: ruby-on-rails select selected collection-select

在Rails 4中,我有

<%= form_for @person do |f| %>
  <%= f.collection_select :country_id, Country.order(:name), :id, :name, include_blank: "Select your country" %>
  ...
<% end %>

我希望在加载页面时选择“选择您的国家/地区”作为默认设置。一种方法是使用javascript(在加载dom后选择它)。是否有更简单的方法,例如向collection_select添加选项?

感谢。

1 个答案:

答案 0 :(得分:5)

根据the docs,它是prompt参数中的options选项:

collection_select(:post, :author_id, Author.find(:all),
                  :id, :name_with_initial,
                 {:prompt => 'Please select the author of this post'})

在表单构建器上使用collection_select我们省略了第一个参数,所以在这种情况下:

f.collection_select :country_id, Country.order(:name), :id, :name, {prompt: 'Select your country'}

我100%确认这是在我自己的应用程序上运行Rails 4.1.6,其中promptinclude_blank做同样的事情。

这样做的方式是Rails注入一个空值<option>作为生成的<select>中的第一项(这是因为HTML规范与文本输入上的placeholder没有任何相似之处对于选择输入)。

原因可能会失败:

  1. Rails没有使用selected属性标记提示选项,我怀疑某些浏览器可能会选择呈现自己的空白条目而不是列表中的第一个
  2. 如果对于现有记录,Rails确定当前记录country_id与列表中的元素匹配,则会将该标记标记为selected。这是预期的行为,但如果您做任何非标准的事情,可能会很痛苦。
  3. 如果您被这些问题所困,您可以选择手动构建表单(方法options_from_collection_for_select可能在此处使用)或在javascript中执行此操作。还有一个未记录的default属性,您可以将其添加到<option>代码中,但它不在规范中,浏览器支持可能不完整,您仍然需要构建手动形成。