ArgumentError ('1' не является допустимым типом) в Rails - PullRequest
0 голосов
/ 15 сентября 2018

Я работаю над формой, в которой есть список выбора:

<%= f.select :type, options_for_select(Property.types), {prompt: "Select Type of Property..."}, class: "form-control" %>

type - это целое число в моей базе данных.Property.types вытягивает список из атрибута enum в моей модели свойств:

enum type: { Type_1: 1, Type_2: 2, Type_3: 3 }

По какой-то причине при отправке формы я получаю сообщение об ошибке:

ArgumentError ('1' не является допустимым типом): выполнено 500 Внутренняя ошибка сервера за 10 мс (ActiveRecord: 4,0 мс)

Я предполагаю, что это потому, что выбранное значение списка представляется какстрока вместо целого числа.

Я использую Rails v.5.2.1.

Как решить эту проблему?

1 Ответ

0 голосов
/ 15 сентября 2018

ArgumentError ('1' не является допустимым типом)

Вы должны изменить select, как показано ниже

<%= f.select :type, options_for_select(Property.types.map { |key, value| [key.humanize, key] }), {prompt: "Select Type of Property..."}, class: "form-control" %>

Потому что это

<%= f.select :type, options_for_select(Property.types), {prompt: "Select Type of Property..."}, class: "form-control" %>

генерирует select с options как

<option value="0">Type_1</option>
<option value="1">Type_2</option>
<option value="2">Type_1</option>

Таким образом, при отправке формы значения select отправляются как "0", "1", "2", которые являются недопустимыми типами для перечисления type.

А это

<%= f.select :type, options_for_select(Property.types.map { |key, value| [key.humanize, key] }), {prompt: "Select Type of Property..."}, class: "form-control" %>

генерирует select с options, как

<option value="Type_1">Type 1</option>
<option value="Type_2">Type 2</option>
<option value="Type_3">Type 3</option>

Так что теперь значения select отправляются как "Type_1", "Type_2", "Type_3", которые являются допустимыми типами для перечисления type.

Кроме того, type является резервным словом (используется в STI ). Я рекомендую изменить его на что-то вроде property_type

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