martes, 8 de enero de 2013

Crear un combo de selección en un formulario de Rails

Dentro de la poca complejidad que tiene hacer un formulario en Rails, quizá el combo de selección puede que sea el único con algo más de dificultad.

El resultado que queremos obtener es algo como:

<select id="persona" name="persona">
 <option>1</option> 
 <option>2</option>
 <option>3</option>
 <option>4</option>
</select>

Para esto, las opciones que tenemos son:

Meter el option directamente

Es decir, Html puro con el conjunto de los option, en una cadena, y escapándolo con html_safe. Funcionará, aunque en mi opinión no es una opción muy elegante.

Obtener una colección de opciones del modelo

Si el dato que queremos recuperar en el obtión es un objeto en sí mismo, lo correcto es formar a partir de este objeto el option.
select_tag "personas", options_from_collection_for_select(@personas, "id", "nombre")

De esta manera crearemos un 'select' con todos los objetos que haya en @personas, mostrando el nombre para la selección, y enviando el ID cuando se haga el submit.

Array con los valores


Para el caso en que simplemente queramos enviar un array con valores:

select_tag :personas, options_for_select((1..10).to_a, nil)


El primer parámetro es el array de valores. Si es un array donde cada elemento , a su vez, es un array de dos elementos, el segundo es el valor, y el primero el que se muestra.

El segundo parámetro determina el valor que estará seleccionado por defecto.