Ich benutze Rails 3.2.0.rc2 . Ich habe eine Model
, in der ich eine Statik habe, Array
die ich über ein Formular anbiete, so dass Benutzer eine Teilmenge von auswählen Array
und ihre Auswahl in der Datenbank speichern können, die in einer einzelnen Spalte in gespeichert ist Model
. Ich habe serialize für die Datenbankspalte verwendet, in der das gespeichert Array
ist, und Rails konvertiert die Benutzerauswahl korrekt in Yaml (und zurück in ein Array, wenn diese Spalte gelesen wird). Ich verwende eine Mehrfachauswahl-Formulareingabe, um eine Auswahl zu treffen.
Mein Problem ist, dass, so wie ich es derzeit habe, alles so funktioniert, wie ich es erwarten würde, außer dass das Subset-Array des Benutzers immer ein leeres erstes Element hat, wenn es an den Server gesendet wird.
Dies ist keine große Sache, und ich könnte Code schreiben, um das nachträglich auszuschneiden, aber ich habe das Gefühl, dass ich nur einen syntaktischen Fehler mache, da es mir nicht so vorkommt, als ob das Standardverhalten von Rails absichtlich wäre Fügen Sie dieses leere Element ohne Grund hinzu. Ich muss etwas verpasst oder vergessen haben, eine Einstellung zu deaktivieren. Bitte helfen Sie mir zu verstehen, was mir fehlt (oder verweisen Sie mich auf eine gute Dokumentation, die dies ausführlicher beschreibt als das, was ich auf den Zwischenrohren finden konnte).
MySQL-Datenbanktabelle 'Modelle':
- enthält eine Spalte mit dem Namen
subset_array
TEXT
Das Klassenmodell enthält die folgenden Einstellungen:
serialize :subset_array
ALL_POSSIBLE_VALUES = [value1, value2, value3, ...]
Das Formular zum Bearbeiten von Modellen enthält die folgende Eingabemöglichkeit:
f.select :subset_array, Model::ALL_POSSIBLE_VALUES, {}, :multiple => true, :selected => @model.subset_array
Das PUT vom Client auf den Server sieht ungefähr so aus:
- Angenommen, nur Wert1 und Wert3 sind ausgewählt
"model" => { "subset_array" => ["", value1, value3] }
Das Datenbank-Update sieht folgendermaßen aus:
UPDATE 'models' SET 'subset_array' = '--- \n- \"\"\n- value1\n- value3\n'
Wie Sie sehen können, wird dieses zusätzliche leere Element im Array gesendet und in der Datenbank festgelegt. Wie werde ich das los? Gibt es einen Parameter, den ich in meinem f.select
Anruf vermisse ?
Vielen Dank geschätzt :)
BEARBEITEN : Dies ist der generierte HTML-Code aus der f.select
Anweisung. Es sieht so aus, als würde eine versteckte Eingabe generiert, die die Ursache für mein Problem sein könnte. Warum ist das da?
<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
generiert wird? Tritt dieses Verhalten auch beim Erstellen auf oder handelt es sich nur um ein Update?