¿Cómo configuro las opciones HTML para collection_select en Rails?


82

Parece que no puedo encontrar la sintaxis para agregar una clase a una etiqueta de selección generada por Rails collection_select. ¿Un poco de ayuda?


1
¿Puede dar algún ejemplo de lo que quiere hacer? No entiendo tu pregunta.
klew

Claro ... estoy usando rails '<% = f.collection_select ...%> para generar: <select ...> ... </select> Solo quiero que sea: <select class = "foo "...> ... </select>
tybro0103

Respuestas:


180

Muchos ayudantes de Rails toman varios argumentos hash. La primera suele ser las opciones para controlar el ayudante en sí, y la segunda son las html_options, donde especifica identificadores personalizados, clases, etc.

La definición del método se ve así:

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

Notará el múltiple '= {}' en la lista de parámetros. Para usar esto, el primer conjunto de opciones que especificaría debe estar entre llaves:

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

Si no tiene ninguna opción para especificar además de la clase html, simplemente coloque un marcador de posición de hash vacío:

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

La documentación adicional de la API está disponible en: http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/collection_select


Ah, debería haber leído la documentación un poco más de cerca :)
tybro0103

1
Aquí hay una extensión de esta respuesta que muestra cómo modificar el estilo .css y usar jQuery onchange eventos<%= 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);$('#blind').show('blind', 500)"}) %>
wantrapreneur

Drew, buena respuesta. Aclarando todas mis dudas con respecto a collection_select.
Swapnil Chincholkar

Bastante precisa tu respuesta. Muchas gracias.
Francisco Quintero

3
Gracias por una explicación clara. Este es uno de los trucos de Rails y está mal documentado en RailsDocs.
lacostenycoder

9
= f.collection_select :category_id, Category.order(:name), :id, :name, {}, {class: "store-select"}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.