2011-10-02 14 views
15

tengo:rieles Formtastic: añadir campo "Data-" a la etiqueta de opción

form.input :duration, as: select, collection: {} 

necesito:

<option value="" data-price="XXX"></option> 

Carriles no es compatible con HTML 5 atributos de datos para la etiqueta de opción. Formtastic suggests para crear un método de ayuda para esto.

Formtastic readme describes cómo extender las etiquetas de entrada. Sin embargo, en select_input.rb no puedo encontrar ningún método que afecte la etiqueta . Entonces, ¿cómo hago esto?

Además, encontré enhanced_select gema que hace exactamente lo que necesito, pero no puedo hacer que funcione con formtastic.

Respuesta

28

En realidad, los rieles son compatibles con la adición de cualquier tipo de etiqueta html a las opciones. Por lo general, usted tendría que:

options_for_select([['First', 1], ['Second', 2]]) 

que le daría

<option value="1">First</option> 
<option value="2">Second</option> 

Si se agrega un hash en las matrices para cada opción se añadirán las claves hash/valores como atributo HTML para la opción, por ejemplo,

options_for_select([['First', 1, {:'data-price' => 20}], 
        ['Second', 2, {:'data-price' => 30}]]) 

producirá las variables necesarias:

<option value="1" data-price="20">First</option> 
<option value="2" data-price="30">Second</option> 
+0

Not in Rails 2.3. – Zabba

8

Asumiendo que tiene un modelo llamado Los productos que, en realidad se puede hacer esto en Formtastic así:

form.select :duration, 
      collection: Items.map{|item| [item.name, item.id, {"data-price" => item.price}]} 

Esencialmente lo que está haciendo está pasando una matriz de matrices donde el valor final en cada matriz es un hash. P. ej.

[ 
    ['Item 1', 1, {"data-price" => '$100'}], 
    ['Item 2', 2, {"data-price" => '$200'}] 
] 

rieles 3+ (quizás 2.x - Yo no confirmo) a utilizar en el hash como matriz y simplemente añadirlo a la html de la etiqueta de opción. Que le da la siguiente:

<option data-price="$100" value="1">Item 1</option> 
<option data-price="$200" value="2">Item 2</option> 
2
options_for_select([ 
    ['Item 1', 1, data:{price: 121, delivery: 11}], 
    ['Item 2', 2, data:{price: 122, delivery: 22}] 
]) 

Produce

<option data-delivery="11" data-price="121" value="1">Item 1</option> 
<option data-delivery="22" data-price="122" value="2">Item 2</option> 

Advantage

Utilizando datos: {...} es más concisa y si el uso de múltiples etiquetas de datos puede guardar código

Cuestiones relacionadas