通常应允许字段"kind"为空。但如果不是空白,则该值应包含在[‘a’,‘b’]中
validates_inclusion_of :kind, :in => ['a', 'b'], :allow_nil => true
代码不起作用?
在Rails5中,您可以在包含块外部或内部使用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)
用于文本值
此语法将执行包含验证,同时允许nils:
validates :kind, :inclusion => { :in => ['a', 'b'] }, :allow_nil => true
同时检查:allow_blank=>true
如果您试图在belongs_to
关联中的Rails5中实现这一点,请考虑默认行为需要存在该值。
要选择退出此行为,必须指定optional
标志:
belongs_to :foo, optional: true
validates :foo, inclusion: { in: ['foo', 'bar'], allow_blank: true }
在Rails5.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
当然比将空值存储为空字符串要好。