验证与validate_uniquess_of?

时间:2019-07-04 04:16:45

标签: ruby-on-rails

使用之间有区别

redux

validates :foo, uniqueness: true

我知道这是一个简单的问题,但是Google didn't help

何时以及为何要在另一个上使用它?

1 个答案:

答案 0 :(得分:5)

validates方法是Rails提供的所有默认validators的快捷方式。因此,validates :foo, uniqueness: true将在后台触发UniquenessValidatorvalidates的源代码可以在in the API doc here中找到。如此处所示,它基本上会触发所传递选项的验证程序,并在传递无效选项的情况下引发错误。 validates_uniqueness_of也会触发UniquenessValidator,与validates相同。它的源代码是

# File activerecord/lib/active_record/validations/uniqueness.rb, line 233
  def validates_uniqueness_of(*attr_names)
    validates_with UniquenessValidator, _merge_attributes(attr_names)
  end

唯一的区别是使用validates_uniqueness_of,我们只能验证唯一性,而不能传递其他选项,而validates则接受多个选项。因此,我们可以使用validates进行以下验证:

validates :name, presence: true, uniqueness: true, <some other options>

但是validates_uniqueness_of不可能做到这一点。