Rails 4验证:在进行包含时将allow_nil放在何处?

时间:2014-11-06 01:40:34

标签: ruby-on-rails validation inclusion

这两个实现在功能上是否相同?如果是这样,哪个更好?"

  # from a model
  WIDGET_COLORS = %w(red yellow green)
  validates :widget_color,
           inclusion: {in: WIDGET_COLORS, allow_nil: true}

  # from a model
  WIDGET_COLORS = %w(red yellow green)
  validates :widget_color,
           inclusion: {in: WIDGET_COLORS},
           allow_nil: true

更新:修复拼写错误,因此示例读取验证

1 个答案:

答案 0 :(得分:6)

首先validatevalidates是不同的方法 - 它应该是validates

validates将在提供的哈希中搜索所谓的_validates_default_keys,这是一个内部数组[:if, :unless, :on, :allow_blank, :allow_nil , :strict]。传递给此数组中的validates的所有参数都被视为使用此方法附加到模型的所有验证器的公共选项。所以如果你这样做:

validates :widget_color,
          inclusion: {in: WIDGET_COLORS},
          uniqueness: true,
          allow_nil: true

allow_nil会影响两个验证器,或相当于:

validates :widget_color,
          inclusion: {in: WIDGET_COLORS, allow_nil: true},
          uniqueness: {allow_nil: true}

另一方面

validates :widget_color,
          inclusion: {in: WIDGET_COLORS, allow_nil: true},
          uniqueness: true

它只会影响它定义的验证器(在本例中为InclusionValidator