¿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?

tybro0103
fuente
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

Drew Blas
fuente
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"}
drjorgepolanco
fuente