通常应允许字段“种类”为空白。但如果不为空,则该值应包含在 ['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 }
或者
validates :kind, inclusion: { in: ['a', 'b'] }, allow_blank: true
提示:您可以使用in: %w(a b)
文本值
还要检查:allow_blank => true
If you are trying to achieve this in Rails 5 in a belongs_to
association, consider that the default behaviour requires the value to exist.
To opt out from this behaviour you must specify the optional
flag:
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
's 当然比将空值存储为空字符串更好。