Метод validates
является ярлыком для всех стандартных валидаторов , которые предоставляет Rails. Таким образом, validates :foo, uniqueness: true
вызовет UniquenessValidator
под капотом. Исходный код validates
можно найти в документе API здесь . Как показано там, он в основном запускает валидаторы переданных опций и выдает ошибку в случае передачи недопустимой опции.
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
.