Rails 4: collection_select не вставляет атрибут 'class'?

Что мне здесь не хватает? Я работаю с Rails 4.0.0 и тестирую новый Bootstrap 3.0.0rc1. У меня есть простое приложение "рецепт", в котором есть модель рецепта и модель категории, которая подает поле "категория" в рецепте. В рецептах # new view у меня есть следующие поля:

<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 отображает правильно отформатированный тэг с атрибутом класса. Однако, независимо от того, как я создаю помощники select или collection_select, я не могу заставить Rails дать мне тот, который содержит атрибут класса. Вышеприведенный код дает мне следующее:

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

...

Итак, запрос приходит, но атрибут класса не работает, поэтому он выглядит как часть хеша html_options. Но стиль Bootstrap не применяется. Не имеет значения, если я использую фигурные скобки {} вокруг класса: "form-control" или нет. Не имеет значения, если я использую parens вокруг параметров collection_select или нет. Случается также с помощью выделенного помощника.

Может ли кто-нибудь посоветовать? Вы тоже это видите?

Ответы

Ответ 1

Попробуйте использовать:

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

Согласно документации rails, сначала появляются параметры, а затем параметры html. Помните, что параметры html должны находиться в фигурных скобках: {prompt: "Select a category"} или {class: "form-control"}.

Ответ 2

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

Проверенный ответ не работает, но проверяется, потому что правильный ответ похож на комментарии (предоставленные Alter Lagos). Я пытаюсь избежать путаницы, переместив фактический ответ из комментариев.

Ответ 3

Попробуйте это, работает для меня!

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

Ответ 4

Другая версия ответа, включающая 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' %>