Rails 3 Поле выбора содержит пустую переменную, но HTML хорошо сформирован - PullRequest
0 голосов
/ 09 декабря 2011

У меня проблемы с тегом 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, и она работает на той же рабочей станции, поэтому я бы посчитал несоответствия в настройках.

Спасибо

1 Ответ

0 голосов
/ 23 декабря 2011

Я наконец-то обнаружил свою ошибку: Type защищен в Rails и изменил имя моей переменной на Kind, чтобы оно работало правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...