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

时间:2013-08-10 15:54:00

标签: forms ruby-on-rails-4 actionviewhelper

我在这里缺少什么?我正在使用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>
...

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

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

...

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

任何人都可以提供建议吗?你也看到了吗?

4 个答案:

答案 0 :(得分:47)

尝试使用:

<%= f.collection_select :category, Category.all, :id, :name, {prompt: "Select a category"}, {class: "form-control"} %>

根据rails documentation,首先是选项,然后是html选项。请注意,html选项必须位于braces{prompt: "Select a category"}{class: "form-control"}

答案 1 :(得分:10)

<%= f.collection_select :category, Category.all, :id, :name, {prompt: "Select a category"}, {class: "form-control"} %>

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

答案 2 :(得分:0)

试试这个,对我有用!

<%= collection_select(:category, :category_id, @category_for_advertising, :id, :description, {}, {:class=>"dropdown-menu"}) %>

答案 3 :(得分:0)

已经回答的另一个版本,包含W3CSS:

  <%= family_form.collection_select :billing_status_id,  
    > BillingStatus.by_tenant(@cutid).order(:description), :id,
    > :description, {}, {class: 'w3-select'} %>
 <%= family_form.label
    > :billing_status, class: 'w3-label' %>