Я использую гем enumerize в своем проекте, и когда я добавляю его в столбец, в котором хочу разрешить нулевые значения, мой тест прерывается, но вставка на консоль не происходит.
MY_TYPES = ['foo',
'baz',
'bar'].freeze
enumerize :my_column, in: MY_TYPES,
default: nil,
scope: :shallow,
presence: false
Когда я пытаюсь добавить нулевое значение к my_column
, появляется проверка ActiveRecord:
*** ActiveRecord::RecordInvalid Exception: Validation failed: My tipes is not included in the list
Но если я изменю значение rails console
, нулевое значение можно будет присвоить без каких-либо проблем.
Я пробовал использовать allow_blank: true
, allow_nil: true
и в последнее время вариант presence: 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? }
Вы говорите, что можете присвоить значение
nil
в консоли, но при этом проверки не выполняются. Сможете ли вы затем запуститьvalidate!
на модели?