RoR - 选择包含include_blank disable的标记

时间:2015-07-22 15:30:42

标签: ruby-on-rails forms select

我想要一个这样的结果:

Execute "blnResponse_Request = fnExcQuery(strUser, strPwd, strQuery_" & strServiceName & ")"      

使用以下代码我最终只能得到:

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

=&GT;

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

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

4 个答案:

答案 0 :(得分:9)

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

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

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

答案 1 :(得分:1)

我相信你要找的是:

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

答案 2 :(得分:1)

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

来自pull request

启用选择标记助手将prompt字段的selected选项标记为disabled和/或required。示例:

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>

答案 3 :(得分: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: '' %>