【问题标题】:Rails collection_select default selectRails collection_select 默认选择
【发布时间】:2014-12-02 14:01:27
【问题描述】:

在 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 添加选项?

谢谢。

【问题讨论】:

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


    【解决方案1】:

    根据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 将空值 &lt;option&gt; 作为生成的 &lt;select&gt; 中的第一项注入(这是因为 HTML 规范在选择输入的文本输入上没有任何类似于 placeholder 的内容)。

    这可能会失败的原因:

    1. Rails 没有使用selected 属性标记提示选项,我怀疑某些浏览器可能会选择呈现自己的空白条目而不是列表中的第一个条目
    2. 如果对于现有记录,Rails 确定当前记录的country_id 与列表中的某个元素匹配,它将将该元素标记为selected。这是预期的行为,但如果您做任何不标准的事情,可能会很痛苦。

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

    【讨论】:

    • 感谢谷歌搜索,但根据你的第一个答案,它不起作用(显然我已经完成了谷歌搜索,还有include_blank: "...",但每当你刷新页面时,选项在选择刷新之前最后一次选择)。
    • @user2725109 试试这样写:&lt;%= f.collection_select :country_id, Country.order(:name), :id, :name, {include_blank: "Select your country"} %&gt;
    • 感谢您的评论。尝试了您的格式(在 {} 中放置 include_blank: "Select your country"),但在刷新选择刷新之前的最后一个选项后,它没有解决问题。
    • @user2725109: 页面加载时选择框中没有显示
    • @SLD。非常感谢您的回复。我试过了,但它不起作用。 include_blank: 'Prompt text' 只能作为options 工作,但不能作为html_options。尝试了所有不同的变体,但没有成功。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    相关资源
    最近更新 更多