rails验证::allownil和:inclusion同时需要



通常应允许字段"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当然比将空值存储为空字符串要好。

相关内容

  • 没有找到相关文章

最新更新