Rails 4:collection_select没有插入'class'属性?

use*_*683 15 forms actionviewhelper ruby-on-rails-4

我在这里错过了什么?我正在使用Rails 4.0.0并尝试新的Bootstrap 3.0.0rc1.我有一个简单的"食谱盒"应用程序,它有一个食谱模型和一个分类模型,可以在食谱上提供"类别"字段.在食谱#new视图中,我定义了以下字段:

<h1>Create New Recipe</h1>
<%= form_for @recipe, html: { class: 'form-horizontal' } do |f| %>
<fieldset>
  <legend>Main Information</legend>
  <div class="form-group">
    <%= f.label :name, "Recipe name", class: "col-lg-2 control-label" %>
    <div class="col-lg-6">
      <%= f.text_field :name, class: "form-control" %>
    </div>
  </div>
<div class="form-group">
  <%= f.label :category_id, class: "col-lg-2 control-label" %>
  <div class="col-lg-6">
    <%= f.collection_select :category, Category.all, :id, :name, class: "form-control", prompt: "Select a category" %>
  </div>
</div>
...
Run Code Online (Sandbox Code Playgroud)

text_field帮助器呈现格式正确的标记,并带有class属性.但是,无论我如何构造select或collection_select助手,我似乎无法让Rails给我一个包含class属性的东西.上面的代码给了我这个:

<select id="recipe_category" name="recipe[category]"><option value="">Select a category</option>

...
Run Code Online (Sandbox Code Playgroud)

所以提示通过,但类attrib没有,所以它看起来像html_options哈希的一部分被识别.但是没有应用Bootstrap样式.如果我在类中使用大括号{}无关紧要:"form-control"与否.如果我在collection_select params周围使用parens,无关紧要.也可以选择帮助器.

任何人都可以建议吗?你也看到了这个吗?

Alt*_*gos 47

尝试使用:

<%= f.collection_select :category, Category.all, :id, :name, {prompt: "Select a category"}, {class: "form-control"} %>
Run Code Online (Sandbox Code Playgroud)

根据rails文档,首先是选项,然后是html选项.请记住,html选项需要括号:{prompt: "Select a category"}{class: "form-control"}.

  • 您是否尝试在两个选项中添加括号?比如`<%= f.collection_select:category,Category.all,:id,:name,{prompt:"选择一个类别"},{class:"form-control"}%>` (2认同)
  • 很抱歉打开一个旧线程,但实际上没有必要将每个html选项包装在一个单独的哈希中.这也适用于其他集合,但原因是集合选择期望在html选项之前与html无关的其他选项的散列.如果你不需要任何这些选项,你只需要包含一个空哈希:`f.collection_select:category,Category.all,:id,:name,{},class:"form-control",required :真的,......` (2认同)

Gar*_*che 10

<%= f.collection_select :category, Category.all, :id, :name, {prompt: "Select a category"}, {class: "form-control"} %>
Run Code Online (Sandbox Code Playgroud)

检查的答案不起作用,但检查是因为正确的答案埋在评论中(由Alter Lagos提供).我试图通过从评论中移出实际答案来避免混淆.