2014-10-08 114 views
1

在Rails 4我有Rails的collection_select默认视图中选择

<%= 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添加选项那样更简单的方法?

谢谢。

回答

3

按照the docs,它在options参数的prompt选项:一个表单生成器,我们省略了第一个参数

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中执行。还有一个可以添加到<option>标签的未公开的default属性,但它不在规范中,浏览器支持可能不完整,您仍然必须手动构建表单。

+0

感谢您使用谷歌搜索,但根据您的第一个答案,它不起作用(很明显,我做了我的谷歌搜索,也有'include_blank:“...”',但是无论何时刷新页面,选择刷新前最后选择的选项)。 – user2725109 2014-10-08 03:26:25

+0

@ user2725109试试这样写:'<%= f.collection_select:country_id,Country.order(:name),:id,:name,{include_blank:“Select your country”}%>' – anusha 2014-10-08 05:13:29

+0

感谢您的评论。尝试过你的格式(在{}中放置'include_blank:'选择你的国家''),但是在选择刷新之前刷新最后一个选项后,它没有解决问题。 – user2725109 2014-10-08 07:25:32