web-dev-qa-db-fra.com

Rails 4: collection_select ne pas insérer l'attribut 'class'?

Qu'est-ce que j'oublie ici? Je travaille avec Rails 4.0.0 et j'essaie le nouveau Bootstrap 3.0.0rc1. J'ai une application simple "boîte de recette" qui a un modèle de recette et un modèle de catégorie qui alimente un champ "catégorie" sur la recette. Dans la recette # nouvelle vue, les champs suivants sont définis:

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

L'assistant text_field affiche une balise correctement formatée, complétée par l'attribut de classe. Cependant, quelle que soit la façon dont je construis les assistants select ou collection_select, je n'arrive pas à obtenir que Rails me donne un attribut contenant une classe. Le code ci-dessus me donne ceci:

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

...

Ainsi, l'invite arrive, mais pas la classe attrib, alors il semble qu'une partie du hachage html_options soit reconnue. Mais le style Bootstrap n'est pas appliqué. Peu importe si j'utilise des accolades {} autour de la classe: "form-control" ou pas. Peu importe que j'utilise ou non des parens autour des paramètres collection_select. Cela se produit également avec certains assistants.

Quelqu'un peut-il conseiller? Voyez-vous cela aussi?

15
user2670683

Essayez d'utiliser:

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

Selon la documentation de Rails , d’abord les options, puis les options html. Rappelez-vous que les options html doivent être entre accolades : {Prompt: "Select a category"} ou {class: "form-control"}.

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

La réponse cochée ne fonctionne pas, mais elle est cochée car la réponse correcte est enterrée dans les commentaires (fournis par Alter Lagos). J'essaie d'éviter toute confusion en déplaçant la réponse réelle des commentaires.

10
Garrett Berneche

Essayez ceci, travaille pour moi!

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

Une autre version de ce qui a été répondu, incorporant 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' %>
0
Norm