rails验证:: allow_nil和:包含两者同时需要

Dan*_*iel 41 ruby validation ruby-on-rails inclusion

通常,字段'kind'应该是空白的.但如果它不是空白,则该值应包含在['a','b']中

validates_inclusion_of :kind, :in => ['a', 'b'], :allow_nil => true
Run Code Online (Sandbox Code Playgroud)

代码不起作用?

Mat*_*att 40

此语法将在允许nils的同时执行包含验证:

validates :kind, :inclusion => { :in => ['a', 'b'] }, :allow_nil => true
Run Code Online (Sandbox Code Playgroud)

  • 任何验证都是例外,如果该值为空白,则不执行进一步的验证。 (2认同)

小智 32

在Rails 5中,您可以使用allow_blank: true外部或内部包含块:

validates :kind, inclusion: { in: ['a', 'b'], allow_blank: true }
Run Code Online (Sandbox Code Playgroud)

要么

validates :kind, inclusion: { in: ['a', 'b'] }, allow_blank: true
Run Code Online (Sandbox Code Playgroud)

提示:您可以使用in: %w(a b)文本值

  • Rails 5.2:`allow_nil`不能在哈希内部或外部起作用。`allow_blank` _做_工作。 (2认同)
  • 请注意,放置的差异会影响属性验证失败时生成的错误消息。 (2认同)

Ore*_*ren 9

另请注意:allow_blank => true

  • 确认`allow_nil:true`在rails 5中不起作用......这在Rails 5中有效. (3认同)