Sto usando Rails 3.2.0.rc2 . Ho un Model
, in cui ho una statica Array
che sto offrendo attraverso un modulo in modo tale che gli utenti possano selezionare un sottoinsieme Array
e salvare la loro selezione nel database, memorizzato in una singola colonna in Model
. Ho usato serializzare sulla colonna del database che memorizza Array
e Rails sta convertendo correttamente le selezioni degli utenti in Yaml (e di nuovo in un array durante la lettura di quella colonna). Sto utilizzando un modulo di selezione multipla per effettuare le selezioni.
Il mio problema è che, nel modo in cui lo ho attualmente, tutto funziona come mi aspetterei tranne che l'array del sottoinsieme dell'utente ha sempre un primo elemento vuoto quando viene inviato al server.
Questo non è un grosso problema e potrei scrivere codice per tagliarlo dopo il fatto, ma mi sento come se stessi commettendo una sorta di errore sintattico poiché non mi sembra che il comportamento predefinito di Rails sarebbe intenzionalmente aggiungi questo elemento vuoto senza motivo. Devo essermi perso qualcosa o ho dimenticato di disabilitare qualche tipo di impostazione. Per favore aiutami a capire cosa mi manca (o indicami una buona documentazione che lo descriva con maggiore profondità di quanto sono riuscito a trovare sugli intertubes).
Tabella di database MySQL 'modelli':
- include una colonna denominata
subset_array
che è un campo TEXT
Il modello di classe include le seguenti impostazioni:
serialize :subset_array
ALL_POSSIBLE_VALUES = [value1, value2, value3, ...]
Il modulo per la modifica dei modelli include la seguente opzione di input:
f.select :subset_array, Model::ALL_POSSIBLE_VALUES, {}, :multiple => true, :selected => @model.subset_array
PUT to server from client assomiglia a questo:
- supponendo che siano selezionati solo valore1 e valore3
"model" => { "subset_array" => ["", value1, value3] }
L'aggiornamento del database ha questo aspetto:
UPDATE 'models' SET 'subset_array' = '--- \n- \"\"\n- value1\n- value3\n'
Come puoi vedere, c'è questo elemento extra, vuoto, nell'array che viene inviato e impostato nel database. Come me ne sbarazzo? C'è un parametro che mi manca nella mia f.select
chiamata?
Molte grazie apprezzate :)
EDIT : questo è il codice HTML generato dall'istruzione f.select
. Sembra che venga generato un input nascosto che potrebbe essere la causa del mio problema? Perché è lì?
<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
sta generando? Inoltre, questo comportamento si verifica anche durante la creazione o è solo in fase di aggiornamento?