我想要这样的结果:
<select dir="rtl">
<option selected disabled>Choose a car</option>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
使用以下代码我只能得到:
<%= f.select(:car, xxxxxx, {:include_blank => 'Choose a car', :disabled => 'Choose a car'}) %>
=>
<select id="xxx" name="xxx">
<option value="">Choose a car</option>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
第一个选项未禁用...
Ito A 的答案在 Rails 4.2 中不起作用(不确定早期版本)。
来自文档...
:disabled - 可以是单个值或将在最终输出中禁用选项的值数组。
因此,:disabled
应为选项指定一个与集合中选项之一的值相匹配的值。所以,:disabled => 'volvo'
将禁用该选项value='volvo'
。但是,它不会匹配 include_blank 选项,因为该选项不是传递到 select 方法的集合的一部分。
Rails 选择助手不直接支持所需的行为。但是,您可以通过向集合中添加空白选项来解决此问题,如下所示。
创建集合,然后向其中添加空白选项。
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: ''}) %>
这是一个link到带有工作示例的 Github 存储库。该示例还表明,Ito A 的答案和类似 SO 问题的其他答案将不起作用。
更新:我已经用解决方案和附加信息更新了我的答案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)