2

在 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

谢谢。

4

1 回答 1

5

根据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. 这是预期的行为,但如果您正在做任何非标准的事情,可能会很痛苦。

如果您被这些问题困扰,您的选择是手动构建表单(该方法options_from_collection_for_select可能在此处使用)或在 javascript 中执行。您还可以将一个未记录的default属性添加到<option>标签中,但它不在规范中,并且浏览器支持可能不完整,您仍然必须手动构建表单。

于 2014-10-08T02:08:28.660 回答