87 votes

Comment définir les options HTML pour collection_select dans Rails ?

Je n'arrive pas à trouver la syntaxe pour ajouter une classe à une balise select générée par Rails. collection_select . De l'aide ?

1 votes

Pouvez-vous donner un exemple de ce que vous voulez faire ? Je ne comprends pas votre question.

0 votes

Bien sûr... J'utilise le <%= f.collection_select ... %> de rails pour générer : <sélect...> ... </select> Je veux juste que ce soit : <select class="foo" ...> ... </select>

190voto

Drew Blas Points 1473

De nombreuses aides Rails prennent plusieurs arguments de hachage. Le premier est généralement les options pour contrôler l'aide elle-même, et le second est le html_options où vous spécifiez les ids personnalisés, les classes, etc.

La définition de la méthode ressemble à ceci :

collection_select(object, method, collection, value_method, text_method, options = {}, html_options = {})

Vous remarquerez les multiples '= {}' dans la liste des paramètres. Pour l'utiliser, le premier ensemble d'options que vous spécifiez doit être placé entre accolades :

collection_select(:user, :title, UserTitle.all, :id, :name, {:prompt=>true}, {:class=>'my-custom-class'})

Si vous n'avez pas d'autres options à spécifier que la classe html, il suffit de mettre un espace vide de type hash :

collection_select(:user, :title, UserTitle.all, :id, :name, {}, {:class=>'my-custom-class'})

Une documentation supplémentaire sur l'API est disponible à l'adresse suivante : http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/collection_select

1 votes

Voici une extension de cette réponse montrant comment modifier le style .css et utiliser les événements onchange de jQuery. <%= collection_select(:question , :text, Question.all , :id, :text, {:prompt => 'Select Question...'}, {:class=>'input', :name=>'normalSelect', :id=>'normalSelect', :style=>'width:50%', :onchange=>"$('#accordion').accordion('activate',2);$('#blin‌​d').show('blind', 500)"}) %>

11voto

epicrates Points 1
= f.collection_select :category_id, Category.order(:name), :id, :name, {}, {class: "store-select"}

-1voto

Gamaliel Points 347

Juste au cas où, je me suis débattu avec le même problème, je partage mon résultat, j'essayais juste de mettre {},{} alors j'ai dû être plus explicite en disant ceci : options = {}, html_options = {} parce que ça n'a pas marché pour moi.

<div class="field">
   <%= form.label :country_id %>
   <%= form.collection_select :country_id, @countries,:id, :name, options = {:prompt => 'Select a Country...'},
        html_options = {class: "dropdown"}%>
 </div>

Salutations !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X