通常应将字段'kind'留空。 但如果它不是空白,则该值应包括在['a','b']
中validates_inclusion_of :kind, :in => ['a', 'b'], :allow_nil => true
代码不起作用?
答案 0 :(得分:36)
此语法将在允许nils时执行包含验证:
validates :kind, :inclusion => { :in => ['a', 'b'] }, :allow_nil => true
答案 1 :(得分:26)
在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)
用于文本值
答案 2 :(得分:9)
另外检查:allow_blank =>真
答案 3 :(得分:1)
如果您试图通过belongs_to
关联在Rails 5中实现此目的,请考虑默认行为要求该值存在。
要退出此行为,必须指定optional
标志:
belongs_to :foo, optional: true
validates :foo, inclusion: { in: ['foo', 'bar'], allow_blank: true }
答案 4 :(得分:0)
在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
比存储空值作为空字符串当然更好。