Tengo una declaración de selección de formulario, como esta:
= f.select :country_id, @countries.map{ |c| [c.name, c.id] }
Lo que da como resultado este código:
...
<option value="1">Andorra</option>
<option value="2">Argentina</option>
...
Pero quiero agregar un atributo HTML personalizado a mis opciones, como este:
...
<option value="1" currency_code="XXX">Andorra</option>
<option value="2" currency_code="YYY">Argentina</option>
...
ruby-on-rails
select
attributes
el_quick
fuente
fuente
Respuestas:
Rails PUEDE agregar atributos personalizados para seleccionar opciones, utilizando el ayudante options_for_select existente. Casi lo tienes bien en el código de tu pregunta. Usando atributos de datos html5:
Agregar una selección inicial:
Si necesita opciones agrupadas, puede usar el ayudante grouped_options_for_select, así (si @continents es una matriz de objetos continentales, cada uno con un método de países):
El crédito debería ser para paul @ pogodan, quien publicó sobre encontrar esto no en los documentos, sino leyendo la fuente de los rieles. https://web.archive.org/web/20130128223827/http://www.pogodan.com/blog/2011/02/24/custom-html-attributes-in-options-for-select
fuente
Puede hacer esto de la siguiente manera:
fuente
Esto no es posible directamente con Rails y tendrás que crear tu propio ayudante para crear los atributos personalizados. Dicho esto, probablemente haya dos formas diferentes de lograr lo que desea:
(1) Usar un nombre de atributo personalizado en HTML5. En HTML5 se le permite tener nombres de atributos personalizados , pero deben ir precedidos de 'datos-'. Estos atributos personalizados no se enviarán con su formulario, pero se pueden utilizar para acceder a sus elementos en Javascript. Si desea lograr esto, recomendaría crear un ayudante que genere opciones como esta:
(2) Usar valores con división personalizada para enviar datos adicionales. Si realmente desea enviar el código de moneda, le recomendaría crear su cuadro de selección como este:
Esto debería generar HTML con este aspecto:
Que luego puede analizar en su controlador:
fuente
El hash de atributos adicionales solo se admite en Rails 3.
Si está en Rails 2.xy desea anular
options_for_select
Básicamente, solo copié el código de Rails 3. Debe anular estos 3 métodos:
Un poco desordenado, pero es una opción. Coloco este código en un módulo auxiliar llamado
RailsOverrides
que luego incluyoApplicationHelper
. También puede hacer un complemento / gema si lo prefiere.Un problema es que para aprovechar estos métodos siempre debe invocar
options_for_select
directamente. Atajos comodará los resultados anteriores. En su lugar, debería ser:
Una vez más, no es una gran solución, pero valdría la pena llegar al siempre tan útil atributo de datos.
fuente
Me encontré con este problema también y creé la Gema Ruby "mejorado_selección" para resolver este problema. Lo puedes encontrar aquí:
https://github.com/bkuhlmann/enhanced_select
fuente