Я использую Rails 3.2.0.rc2 . У меня Model
есть статика, Array
которую я предлагаю через форму, чтобы пользователи могли выбрать подмножество Array
и сохранить свой выбор в базе данных, хранящейся в одном столбце в Model
. Я использовал сериализацию для столбца базы данных, в котором хранится, Array
и Rails правильно конвертирует выбор пользователей в Yaml (и обратно в массив при чтении этого столбца). Я использую форму ввода с множественным выбором, чтобы сделать выбор.
Моя проблема в том, что в моем нынешнем виде все работает так, как я ожидал, за исключением того, что массив подмножества пользователя всегда имеет пустой первый элемент, когда он отправляется на сервер.
Это не имеет большого значения, и я мог бы написать код, чтобы вырезать это постфактум, но мне кажется, что я просто делаю какую-то синтаксическую ошибку, поскольку мне не кажется, что поведение Rails по умолчанию будет намеренно добавьте этот пустой элемент без какой-либо причины. Должно быть, я что-то пропустил или забыл отключить какую-то настройку. Пожалуйста, помогите мне понять, чего мне не хватает (или укажите на какую-нибудь хорошую документацию, которая описывает это более подробно, чем то, что я смог найти на интертубах).
Таблица базы данных MySQL 'модели':
- включает столбец с именем,
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 на сервер от клиента выглядит примерно так:
- предполагая, что выбраны только value1 и value3
"model" => { "subset_array" => ["", value1, value3] }
Обновление базы данных выглядит так:
UPDATE 'models' SET 'subset_array' = '--- \n- \"\"\n- value1\n- value3\n'
Как видите, в массиве, который отправляется и устанавливается в базе данных, есть этот дополнительный пустой элемент. Как мне от этого избавиться? Есть ли параметр, который мне не хватает в моем f.select
вызове?
Большое спасибо оценили :)
РЕДАКТИРОВАТЬ : это сгенерированный 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>
f.select
генерируемый фрагмент HTML ? Кроме того, такое поведение происходит даже при создании или только при обновлении?