2012-04-06 12 views
5

tengo esto ahora:rieles y formas: desplegable con rango de números y ilimitado

<%= f.select :credit, (0..500) %> 

Esto dará lugar a esto:

<option value="1">1</option> 
<option value="2">2</option> 
<option value="3">3</option> 
<option value="4">4</option> 
<option value="5">5</option> 
<option value="6">6</option> 
<option value="7">7</option> 
<option value="8">8</option> 
<option value="9">9</option> 
... 

¿Cómo voy a añadir otra opción en ese selecto eso sería "Todo" y cuál valor debería ser nil?

Respuesta

8

esto será casi hacer lo que quiera:

<%= f.select :credit, ((0..500).map {|i| [i,i] } << ["No limit",nil]) %> 

select puede tomar un número de formatos de la lista de opciones. Uno de ellos es una matriz de matrices, como se muestra aquí. Cada elemento en la matriz externa es una matriz de 2 elementos, que contiene el texto de opción mostrado y el valor del formulario, en ese orden.

El map anterior convierte (0..500) en una matriz como esta, donde la opción que se muestra es idéntica al valor del formulario. Luego se agrega una última opción.

Tenga en cuenta que esto producirá un valor de "" (una cadena vacía) para el parámetro si se selecciona "Ilimitado"; si coloca un campo de selección en un formulario y se envía el formulario, el navegador enviará algo para ese parámetro de formulario, y no hay forma de enviar nil como un parámetro de formulario explícitamente. Si realmente quería que podría utilizar algo de JavaScript lista de conseguir el navegador para que no envíe el Parmeter en absoluto, sino que habría más trabajo que simplemente añadiendo:

param[:credit] == "" and param[:credit] = nil 

a su acción del controlador.

+0

Eso agrega un valor ilimitado "Ilimitado", y me gustaría un valor nulo ... –

+0

respuesta modificada. –