这两个实现在功能上是否相同?如果是这样,哪个"更好?"
# 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
更新:修复拼写错误,因此示例读取验证
首先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
)