Я использую Rails 3.2.0.rc2 . У меня есть Model
, в котором у меня есть статический Array
, который я предлагаю через форму, так что пользователи могут выбрать подмножество Array
и сохранить свой выбор в базе данных, сохраненной в одной столбец в Model
. Я использовал serialize для столбца базы данных, в котором хранится Array
, а Rails правильно преобразовывает выборки пользователей в Yaml (и обратно в массив при чтении этого столбца). Я использую множественный выбор формы для выбора.
Моя проблема в том, что, как у меня сейчас, все работает так, как я и ожидал, за исключением того, что массив поднаборов пользователя всегда имеет пустой первый элемент при отправке на сервер.
Это не имеет большого значения, и я мог бы написать код, чтобы обрезать это после свершившегося факта, но я чувствую, что просто делаю какую-то синтаксическую ошибку, так как мне не кажется, что Rails по умолчанию Поведение намеренно добавит этот пустой элемент без какой-либо причины. Должно быть, я что-то пропустил или забыл отключить какую-то настройку. Пожалуйста, помогите мне понять, чего мне не хватает (или укажите мне какую-нибудь хорошую документацию, которая описывает это более подробно, чем то, что я смог найти в промежутках).
Таблица базы данных MySQL 'models':
- включает столбец с именем
subset_array
, который является текстовым полем
Модель класса включает в себя следующие настройки:
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>