Używam Rails 3.2.0.rc2 . Mam plik Model
, w którym mam statyczny, Array
który oferuję za pośrednictwem formularza, tak aby użytkownicy mogli wybrać podzbiór Array
i zapisać swój wybór w bazie danych, przechowywanej w jednej kolumnie w formacie Model
. Użyłem serializacji w kolumnie bazy danych, która przechowuje, Array
a Railsy poprawnie konwertują wybory użytkowników na Yaml (iz powrotem na tablicę podczas czytania tej kolumny). Do zaznaczania używam pola wyboru wielokrotnego.
Mój problem polega na tym, że tak jak obecnie, wszystko działa tak, jak bym się spodziewał, z wyjątkiem tego, że tablica podzbiorów użytkownika zawsze ma pusty pierwszy element, gdy jest wysyłana na serwer.
To nie jest wielka sprawa i mógłbym napisać kod, który to wyciął po fakcie, ale czuję, że robię jakiś błąd składniowy, ponieważ nie wydaje mi się, że domyślne zachowanie Railsów celowo dodaj ten pusty element bez powodu. Musiałem coś przeoczyć lub zapomnieć o wyłączeniu jakiegoś ustawienia. Proszę, pomóż mi zrozumieć, czego mi brakuje (lub wskaż mi dobrą dokumentację, która opisuje to z większą głębią niż to, co udało mi się znaleźć na intertubach).
Tabela bazy danych MySQL „modele”:
- zawiera kolumnę o nazwie,
subset_array
która jest polem TEKST
Model klasy zawiera następujące ustawienia:
serialize :subset_array
ALL_POSSIBLE_VALUES = [value1, value2, value3, ...]
Formularz do edycji modeli zawiera następującą opcję wprowadzania danych:
f.select :subset_array, Model::ALL_POSSIBLE_VALUES, {}, :multiple => true, :selected => @model.subset_array
PUT na serwer z klienta wygląda mniej więcej tak:
- zakładając, że wybrane są tylko value1 i value3
"model" => { "subset_array" => ["", value1, value3] }
Aktualizacja bazy danych wygląda następująco:
UPDATE 'models' SET 'subset_array' = '--- \n- \"\"\n- value1\n- value3\n'
Jak widać, ten dodatkowy, pusty element tablicy jest wysyłany i ustawiany w bazie danych. Jak się tego pozbyć? Czy brakuje mi parametru w moim f.select
wywołaniu?
Wielkie dzięki :)
EDYCJA : To jest kod HTML wygenerowany z f.select
instrukcji. Wygląda na to, że generowane są ukryte dane wejściowe, które mogą być przyczyną mojego problemu? Dlaczego tak jest?
<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
generowany fragment kodu HTML ? Czy to zachowanie występuje nawet podczas tworzenia, czy tylko podczas aktualizacji?