RoR – 选择包含include_blank disable的标记
我想要一个这样的结果:
Choose a car Volvo Saab Mercedes Audi
使用以下代码,我最终只能得到:
'Choose a car', :disabled => 'Choose a car'}) %>
=>
Choose a car Volvo Saab Mercedes Audi
第一个选项未被禁用…
我相信你要找的是如下:
<%= f.select(:car, xxxxxx, {:include_blank => 'Choose a car', :disabled => 1}) %>
Ito A的答案在Rails 4.2中不起作用(不确定早期版本)。 从文档 ……
:disabled – 可以是单个值或将在最终输出中禁用选项的值数组。
因此, :disabled
选项应该被赋予一个值,该值与集合中某个选项的值相匹配。 所以, :disabled => 'volvo'
将禁用value='volvo'
的选项。 但是,它与include_blank选项不匹配,因为该选项不是传递给select方法的集合的一部分。
Rails select helper不直接支持所需的行为。 但是,您可以通过向集合添加空白选项来解决此问题,如下所示。
创建集合,然后为其添加一个空白选项。
car_names = %w(volvo saab mercedes audi) car_names_with_blank = car_names.map{|c| [c, c]}.prepend(['Choose a car', nil])
在视图中:
<%= f.select(:name, car_names_with_blank, {disabled: '', selected: ''}) %>
这是一个带有工作示例的Github存储库的链接 。 该例子还表明,Ito A的回答以及类似SO问题的其他答案都不起作用。
更新:我已经用解决方案和其他信息更新了我的答案。
以下解决方案的应用如下。
创建应用程序帮助程序function
def build_selections(prompt: "Select One", selections: {}) selections.reverse!.push([prompt, nil]).reverse! end
然后在你的视图中使用它:
<%= f.select :category_id, build_selections(prompt: 'Select Category', selections: @category.collect{|x| [x.name, x.id]}), disabled: '' %>