Я використовую 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
ПУТ на сервер з клієнта виглядає приблизно так:
- припускаючи, що вибрано лише значення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>
f.select
генерує? Крім того, така поведінка трапляється навіть під час створення, чи це просто оновлення?