Я использую Rails 3.2.0.rc2. У меня есть Model
, в котором у меня есть статический Array
, который я предлагаю в форме, так что пользователи могут выбрать подмножество Array
и сохранить их выбор в базе данных, хранящейся в одной столбца в Model
. Я использовал сериализацию в столбце базы данных, в котором хранится Array
, а Rails правильно преобразует выбор пользователей в Ямл (и обратно в массив при чтении этой колонки). Я использую ввод формы с несколькими выборами для выбора.
Моя проблема в том, что, как я ее сейчас, все работает так, как я ожидал бы, за исключением того, что у массива подмножества пользователей всегда есть пустой первый элемент, когда он отправляется на сервер.
Это не большая проблема, и я мог написать код, чтобы вырезать это после факта, но мне кажется, что я просто делаю какую-то синтаксическую ошибку, поскольку мне не кажется, что Rails по умолчанию поведение преднамеренно добавит этот пустой элемент без какой-либо причины. Я, должно быть, что-то пропустил или забыл отключить какую-то настройку. Пожалуйста, помогите мне понять, что мне не хватает (или указать мне на хорошую документацию, которая описывает это с большей глубиной, чем то, что я смог найти на межтрубках).
Таблица базы данных MySQL:
- содержит столбец с именем
subset_array
, который является полем TEXT
Модель класса включает следующие настройки:
-
serialize :subset_array
-
ALL_POSSIBLE_VALUES = [value1, value2, value3, ...]
Форма для редактирования Модели включают в себя следующую опцию ввода:
-
f.select :subset_array, Model::ALL_POSSIBLE_VALUES, {}, :multiple => true, :selected => @model.subset_array
PUT для сервера от клиента выглядит примерно так:
- если выбраны только значения1 и значение3
-
"model" => { "subset_array" => ["", value1, value3] }
Обновление базы данных выглядит следующим образом:
-
UPDATE 'models' SET 'subset_array' = '--- \n- \"\"\n- value1\n- value3\n'
Как вы можете видеть, этот лишний, пустой элемент в массиве отправляется и устанавливается в базе данных. Как я могу избавиться от этого? Есть ли параметр, отсутствующий в моем вызове f.select
?
Большое спасибо!)
EDIT. Это сгенерированный код HTML из инструкции f.select
. Похоже, что создается скрытый ввод, который может быть причиной моей проблемы? Почему это?
<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>