Estoy usando Rails 3.2.0.rc2 . Tengo una Model
, en la que tengo una estática Array
que ofrezco a través de un formulario de modo que los usuarios pueden seleccionar un subconjunto Array
y guardar su selección en la base de datos, almacenada en una sola columna en formato Model
. He usado serializar en la columna de la base de datos que almacena Array
y Rails está convirtiendo correctamente las selecciones de los usuarios en Yaml (y de vuelta a una matriz al leer esa columna). Estoy usando una entrada de formulario de selección múltiple para hacer selecciones.
Mi problema es que, tal como lo tengo actualmente, todo funciona como esperaba, excepto que la matriz de subconjuntos del usuario siempre tiene un primer elemento en blanco cuando se envía al servidor.
Esto no es gran cosa, y podría escribir código para eliminar eso después del hecho, pero siento que solo estoy cometiendo algún tipo de error sintáctico, ya que no me parece que el comportamiento predeterminado de Rails lo haría intencionalmente. agregue este elemento en blanco sin alguna razón. Debo haberme perdido algo o haberme olvidado de desactivar algún tipo de configuración. Ayúdeme a comprender lo que me falta (o indíqueme alguna buena documentación que describa esto con más profundidad de lo que he podido encontrar en los intertubos).
'Modelos' de tablas de base de datos MySQL:
- incluye una columna denominada
subset_array
que es un campo de TEXTO
El modelo de clase incluye las siguientes configuraciones:
serialize :subset_array
ALL_POSSIBLE_VALUES = [value1, value2, value3, ...]
El formulario para editar modelos incluye la siguiente opción de entrada:
f.select :subset_array, Model::ALL_POSSIBLE_VALUES, {}, :multiple => true, :selected => @model.subset_array
PUT al servidor desde el cliente se parece a esto:
- asumiendo que solo se seleccionan value1 y value3
"model" => { "subset_array" => ["", value1, value3] }
La actualización de la base de datos tiene este aspecto:
UPDATE 'models' SET 'subset_array' = '--- \n- \"\"\n- value1\n- value3\n'
Como puede ver, hay un elemento en blanco adicional en la matriz que se envía y configura en la base de datos. ¿Cómo me deshago de eso? ¿Hay algún parámetro que me falta en mi f.select
llamada?
Muchas gracias apreciado :)
EDITAR : Este es el código HTML generado a partir de la f.select
declaración. ¿Parece que se está generando una entrada oculta que puede ser la causa de mi problema? ¿Por qué está ahí?
<input name="model[subset_array][]" type="hidden" value>
<select id="model_subset_array" multiple="multiple" name="model[subset_array][]" selected="selected">
<option value="value1" selected="selected">Value1</option>
<option value="value2">Value2</option>
<option value="value3" selected="selected">Value3</option>
<option...>...</option>
</select>
f.select
está generando? Además, ¿este comportamiento ocurre incluso en la creación o solo en la actualización?