レールの列挙では nil 値は許可されません
概要
プロジェクトで enumerize gem を使用していますが、nil 値を許可したい列にそれを追加すると、テストは中断されますが、コンソールへの挿入は中断されません。
MY_TYPES = ['foo',
'baz',
'bar'].freeze
enumerize :my_column, in: MY_TYPES,
default: nil,
scope: :shallow,
presence: false
my_column に nil 値を追加しようとすると、ActiveRecord 検証が表示されます。
*** ActiveRecord::RecordInvalid Exception: Validation failed: My tipes is not included in the list
ただし、Rails コンソールから値を変更すると、問題なく nil 値を割り当てることができます。
私は、allow_blank: true、allow_nil: true、そして最近では present: false オプションを試してきました。
助けていただければ幸いです。
解決策
ドキュメントに従って、包含検証はデフォルトで追加されます。 Skip_validation を追加してから、allow_nil 包含検証を自分で追加する必要があります。
enumerize :my_column, in: MY_TYPES, skip_validations: true, ...
validates :my_column, inclusion: MY_TYPES, allow_nil: true
ラムダを含めることもできることに今気づきました。そのため、(テストされていませんが)これを(個別の検証を追加することなく)実行できるはずです。
enumerize :my_column, in: MY_TYPES, skip_validations: -> { _1.my_column.nil? }