RoR - 选择包含include_blank disable的标记

问题描述 投票:7回答:4

我想要一个这样的结果:

<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>

第一个选项未被禁用...

ruby-on-rails forms select
4个回答
1
投票

我相信你要找的是如下:

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

10
投票

Ito A的答案在Rails 4.2中不起作用(不确定早期版本)。来自documentation ......

: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: ''}) %>

这是一个带有工作示例的Gazub存储库的link。该例子还表明,Ito A的回答以及对类似SO问题的其他答案都不起作用。

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


1
投票

我相信他们在Rails 6中添加了功能。

来自pull request

启用select tag helper将prompt选项标记为selected和/或disabledrequired字段。例:

select :post, 
       :category, 
       ["lifestyle", "programming", "spiritual"], 
       { selected: "", disabled: "", prompt: "Choose one" }, 
       { required: true }

将选中并禁用占位符选项。 HTML制作:

<select required="required" name="post[category]" id="post_category">
  <option disabled="disabled" selected="selected" value="">Choose one</option>
  <option value="lifestyle">lifestyle</option>
  <option value="programming">programming</option>
  <option value="spiritual">spiritual</option>
</select>

0
投票

以下解决方案的应用如下。

创建应用程序帮助程序功能

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: '' %>
© www.soinside.com 2019 - 2024. All rights reserved.