RoR - 选择包含include_blank disable的标记

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问题的其他答案都不起作用.

更新:我已用解决方案和其他信息更新了我的答案.


ifm*_*fma 1

我相信您正在寻找的内容如下:

<%= f.select(:car, xxxxxx, {:include_blank => 'Choose a car', :disabled => 1}) %>
Run Code Online (Sandbox Code Playgroud)

  • 这个答案是不正确的。我在下面的答案中提供了解决方案。我还提供了 github 存储库的链接,表明该答案不起作用。 (3认同)
  • 这似乎不起作用,至少在我的 Rails 5.2.0.rc 项目中是这样。 (2认同)