根据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 的应用程序上工作,在哪里prompt
做include_blank
同样的事情。
它的工作方式是 Rails 注入一个空值<option>
作为生成的第一项<select>
(这是因为 HTML 规范没有类似于placeholder
选择输入的文本输入)。
这可能失败的原因:
- Rails 没有用
selected
属性标记提示选项,我怀疑某些浏览器可能会选择呈现自己的空白条目而不是列表中的第一个
- 如果对于现有记录,Rails 确定当前记录
country_id
与列表中的元素匹配,它将将该元素标记为selected
. 这是预期的行为,但如果您正在做任何非标准的事情,可能会很痛苦。
如果您被这些问题困扰,您的选择是手动构建表单(该方法options_from_collection_for_select
可能在此处使用)或在 javascript 中执行。您还可以将一个未记录的default
属性添加到<option>
标签中,但它不在规范中,并且浏览器支持可能不完整,您仍然必须手动构建表单。