Обычно поле «вид» следует оставлять пустым. но если он не пуст, значение должно быть включено в ['a', 'b']
validates_inclusion_of :kind, :in => ['a', 'b'], :allow_nil => true
Код не работает?
Обычно поле «вид» следует оставлять пустым. но если он не пуст, значение должно быть включено в ['a', 'b']
validates_inclusion_of :kind, :in => ['a', 'b'], :allow_nil => true
Код не работает?
Этот синтаксис будет выполнять проверку включения, разрешая nil:
validates :kind, :inclusion => { :in => ['a', 'b'] }, :allow_nil => true
В Rails 5 вы можете использовать allow_blank: true
снаружи или внутри блока включения:
validates :kind, inclusion: { in: ['a', 'b'], allow_blank: true }
or
validates :kind, inclusion: { in: ['a', 'b'] }, allow_blank: true
совет: вы можете использовать in: %w(a b)
для текстовых значений
allow_blank
и allow_nil
работают независимо друг от друга. Вам потребуется перезапустить веб-сервер, если вы меняете этот код в файле model.rb.
- person MSC; 13.12.2018
allow_nil
не работает ни внутри, ни снаружи хеша. allow_blank
работает.
- person tfwright; 12.03.2019
проверьте также :allow_blank => true
allow_nil: true
не работал в приложении Rails 4, над которым я работал. Я могу подтвердить, что это работает в Rails 4.
- person Richard Jones; 18.07.2015
allow_nil: true
НЕ работает в Rails 5... это работает в Rails 5.
- person daino3; 02.12.2016
Если вы пытаетесь добиться этого в Rails 5 в ассоциации belongs_to
, учтите, что поведение по умолчанию требует, чтобы значение существовало.
Чтобы отказаться от этого поведения, вы должны указать флаг optional
:
belongs_to :foo, optional: true
validates :foo, inclusion: { in: ['foo', 'bar'], allow_blank: true }
В Rails 5.x вам нужно, помимо следующей строки, вызвать метод before_validation
:
validates_inclusion_of :kind, :in => ['a', 'b'], :allow_nil => true
before_validation
необходим для преобразования отправленного пустого значения в nil
, иначе ''
не считается nil
, например:
before_validation(on: [:create, :update]) do
self.kind = nil if self.kind == ''
end
Для использования дискового пространства базы данных, конечно, лучше хранить nil
, чем хранить пустые значения в виде пустых строк.