Sté*_*ane 7 forms select ruby-on-rails
我想要一个这样的结果:
<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>
Run Code Online (Sandbox Code Playgroud)
使用以下代码,我最终只能得到:
<%= f.select(:car, xxxxxx, {:include_blank => 'Choose a car', :disabled => 'Choose a car'}) %>
Run Code Online (Sandbox Code Playgroud)
=>
<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>
Run Code Online (Sandbox Code Playgroud)
第一个选项未被禁用...
Joe*_*e H 10
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])
Run Code Online (Sandbox Code Playgroud)
在视图中:
<%= f.select(:name, car_names_with_blank, {disabled: '', selected: ''}) %>
Run Code Online (Sandbox Code Playgroud)
这是一个带有工作示例的Github存储库的链接.该例子还表明,Ito A的回答以及对类似SO问题的其他答案都不起作用.
更新:我已用解决方案和其他信息更新了我的答案.
我相信您正在寻找的内容如下:
<%= f.select(:car, xxxxxx, {:include_blank => 'Choose a car', :disabled => 1}) %>
Run Code Online (Sandbox Code Playgroud)