валидировать против validate_uniquess_of? - PullRequest
0 голосов
/ 04 июля 2019

Есть ли разница между использованием

validates :foo, uniqueness: true

или

validates_uniqueness_of :foo

Я знаю, что это простые вопросы, но Google не помог

Когда и почему один должен использоваться поверх другого?

1 Ответ

5 голосов
/ 04 июля 2019

Метод 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...