Почему в моем множественном выборе Rails с использованием встроенного массива первый элемент всегда пустой?

Я использую Rails 3.2.0.rc2 . У меня есть Модель , в которой у меня есть статический массив , который я предлагаю через форму, чтобы пользователи могли выбрать подмножество Array и сохранить свой выбор в базе данных, сохраненной в единственном столбце в Модель . Я использовал сериализацию в столбце базы данных, в котором хранится массив , и Rails правильно конвертирует выбор пользователей в Yaml (и обратно в массив при чтении этого столбца). Я использую форму ввода с множественным выбором, чтобы сделать выбор.

Моя проблема в том, что в моем нынешнем виде все работает так, как я ожидал, за исключением того, что массив пользовательских подмножеств всегда имеет пустой первый элемент при отправке на сервер.

Это не имеет большого значения, и я мог бы написать код, чтобы вырезать это постфактум, но мне кажется, что я просто делаю какую-то синтаксическую ошибку, поскольку мне не кажется, что Rails по умолчанию поведение намеренно добавило бы этот пустой элемент без какой-либо причины. Должно быть, я что-то пропустил или забыл отключить какую-то настройку. Пожалуйста, помогите мне понять, чего мне не хватает (или укажите на какую-нибудь хорошую документацию, которая описывает это более подробно, чем то, что я смог найти на интертубах).

Таблица базы данных MySQL «модели»:

  • включает столбец с именем subset_array , который является полем ТЕКСТ.

Модель класса включает следующие параметры:

  • serialize: subset_array
  • ALL_POSSIBLE_VALUES = [значение1, значение2, значение3, ...]

Форма для редактирования моделей включает следующую опцию ввода:

  • 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 ?

Большое спасибо :)

EDIT : Это сгенерированный HTML-код из f. выберите оператор . Похоже, создается скрытый ввод, который может быть причиной моей проблемы? Почему это там?

<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>
81
задан robmclarty 28 February 2012 в 15:03
поделиться