ArgumentError: '1' не является допустимым типом. Значение enum не сохраняется в базе данных - PullRequest
1 голос
/ 03 февраля 2020

Моя пользовательская модель имеет атрибут:

t.integer :kind

Пользовательская модель выглядит примерно так для представления перечисления:

Roles = ["admin","user"]

enum kind: Roles

В представлении я использовал select тег, чтобы выбрать роль пользователя, как:

= f.label :kind, "Kind:"
= f.select :kind, options_for_select(User::Roles.map.with_index{|role,index| [role.titlecase,index]})

Проблема

Когда я сохраняю форму, я получаю сообщение об ошибке:

'1' недопустимый тип

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

Ответы [ 2 ]

4 голосов
/ 03 февраля 2020

Любое другое значение, которое не указано в вашей модели в определении типа enum, не будет действительным. Вы можете просто создать новую запись со значениями admin или user.

Попробуйте:

f.select :kind, options_for_select(User::Roles.map { |role| [role.titlecase, role] })

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

Обратите внимание, вы не должны хранить определения пользовательских типов где-либо еще. Если вы определите его в модели, вы сможете впоследствии вызвать его как класс метода:

# model
enum kind: %w[admin user]

# view
User.kinds.keys.map { |role| [role.titlecase, role] }
0 голосов
/ 03 февраля 2020

option_for_select должно быть User::Roles.map.with_index{|role,index| [role.titlecase,role.titlecase]}

...