Ruby on Rails的集合选择器显示空白的“提示”值?

12
我有一个类似下面的集合选择器:
<%= f.collection_select :region_id, Region.find(:all), :id, :name, { :prompt => 'Select a State/Province' }, :style => "width: 200px;" %>

有时会弹出 :prompt 选项的提示,但有时却不会。有人知道我可以从哪里开始排查吗?也许是我看了太久了...


只是想澄清一下:您是说上面的代码有时候可以工作,有时候不能工作,还是说您有两个类似代码的集合选择器,其中一个可以工作而另一个不行? - Taryn East
5个回答

43

:include_blank 的值设为你的空选项似乎可以解决问题。试试这个:

 {:include_blank => "Please select"}

1
只是需要注意的一点:如果您使用select_tag方法,它将不会尊重传递到include_blank中的字符串。相反,请使用prompt - Joshua Pinter

13

:prompt表示在没有选定值时显示在列表中。

:include_blank始终出现在列表中,即使您已经加载了带有选定值的select。


如果您希望您的select始终将"选择一个州/省"作为第一个选项:

<%= f.collection_select :region_id, Region.all, :id, :name, include_blank: 'Select a State/Province' %>

如果您希望在没有选择区域时,使您的集合以"选择州/省"作为第一个选项:

<%= f.collection_select :region_id, Region.all, :id, :name, prompt: 'Select a State/Province' %>

来源: http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html


1
“:prompt” 总是出现,但如果有选定的值,则在页面加载时不会被选中。 - Alexander Popov
@AlexPopov 我不相信这是真的。看起来,如果你的对象在表单加载时有一个值,比如region_id,那么提示值就不会出现,而include_blank则会出现。 - Joshua Pinter
@JoshPinter 我也遇到了同样的问题:即使选择了另一个值,提示值仍然是可选择的选项。 - Eric Chen
@EricChen 有趣。那绝对不是它应该工作的方式。 - Joshua Pinter
我遇到了这个问题,这里有人能找到解决方法吗?先谢谢了。@EricChen - Sidonai

2

如果正在创建属性,则必须使用大括号将提示括起来,例如{prompt: true}。这将Rails助手方法的选项哈希与HTML元素的属性哈希分开。只有方法的最后一个哈希参数可以不使用大括号。 - Chloe

0
尝试这个:<%= f.collection_select :region_id, Region.all, :id, :name, {prompt: 'Select a State/Province'}, {class: "form-control"} %>

2
你好,欢迎来到SO。在回答问题时,请添加更多的信息,以便原帖作者和未来的读者能够更好地理解你的解决方案。 - Deepend

-1

不要使用

:prompt => "Select a State/Province"

尝试

:allow_blank => "Select a State/Province"

编辑:在检查API后,我发现我混淆了,提示是根据文档正确的方法,可能是因为您的对象已经有一个值,因此提示出现但它不是下拉列表中当前选择的值吗?


感谢您的验证。然而,当有选定值时,提示甚至不会出现在列表中。它不存在。目前,我已经在JS中进行了一些修改,但我有点困惑发生了什么... - Tony
这是:include_blank。http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html - Chloe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接