У меня проблемы с тегом select
на мой взгляд.
Прежде всего я использую Rails 3.1.1
и Ruby 1.9.2 p290
Модель представляет собой расходный материал, который имеет название, поставщика, номер заказа, тип и соответствующие модели принтера, с которыми он совместим.
Поле, которое не проверяется корректно, равно type
, в которое передаются значения из массива в модели расходных материалов, и проверка должна быть запрещена при включении одного из элементов массива.
В модели я определяю валидацию поля следующим образом:
TYPES = [ "REM", "REM-HICAP", "OEM", "OEM-HICAP" ]
validates :type, inclusion: TYPES
В представлении (частичное для Consumable формы) я создал тег select таким образом
<div class="field">
<%= f.label "Type" %><br />
<%= f.select :type, Consumable::TYPES, prompt: 'Select a type...',
:selected => params[:type] %>
</div>
Раскрывающийся список создает правильно сформированный HTML, который выглядит следующим образом
<div class="field">
<label for="consumable_Type">Type</label><br />
<select id="consumable_type" name="consumable[type]">
<option value="">Select a type...</option>
<option value="REM">REM</option>
<option value="REM-HICAP">REM-HICAP</option>
<option value="OEM">OEM</option>
<option value="OEM-HICAP">OEM-HICAP</option>
</select>
</div>
Когда я публикую форму, это отладочная информация
---
utf8: ?
_method: put
authenticity_token: nZZ9MastYswVCDrvAbgVLTUWqSRZLVrvRLmxOqPYk7I=
consumable:
description: Black Toner
supplier_id: '1'
reorder_no: '123456'
type: OEM
printer_model_ids:
- '1'
- '3'
commit: Update Consumable
action: update
controller: consumables
id: '1'
Как видно из отладочной информации, тип задается правильно со значением из поля выбора (строка), а type
в модели - это string
. Вместо этого форма показывает ошибку проверки «Тип не включен в список», и если я удаляю проверку, база данных показывает нулевое значение для поля type
.
В какой момент проверка применяется к форме, контроллер запускает ее, пытаясь сохранить объект?
Я использовал тот же метод проверки раскрывающегося списка в приложении depot
в Agile Web Development с Rails 4-е издание, по сути с тем же кодом, но с другим именем массива, и он работает правильно.
Я только что проверил ту же проверку в приложении depot
, и она работает на той же рабочей станции, поэтому я бы посчитал несоответствия в настройках.
Спасибо