1

这两个实现在功能上是等效的吗?如果是这样,哪个“更好”?

  # 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

更新:修复了错字,因此示例读取验证

4

1 回答 1

8

首先是不同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

于 2014-11-06T01:55:43.070 回答