这两个实现在功能上是否相同?如果是这样,哪个更好?"
# 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
更新:修复拼写错误,因此示例读取验证
答案 0 :(得分:6)
首先validate
和validates
是不同的方法 - 它应该是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
)