50

通常应允许字段“种类”为空白。但如果不为空,则该值应包含在 ['a', 'b'] 中

validates_inclusion_of :kind, :in => ['a', 'b'], :allow_nil => true

代码不起作用?

4

5 回答 5

48

此语法将在允许 nil 时执行包含验证:

validates :kind, :inclusion => { :in => ['a', 'b'] }, :allow_nil => true
于 2013-06-28T08:18:37.190 回答
46

在 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)文本值

于 2017-03-06T14:58:11.103 回答
9

还要检查:allow_blank => true

于 2014-03-11T10:48:33.633 回答
2

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 } 
于 2019-03-21T09:02:27.920 回答
2

在 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 当然比将空值存储为空字符串更好。

于 2019-08-01T17:09:08.497 回答