Они оба делают одну и ту же вещь, validates_confirmation_of
- это только один из множества коротких вспомогательных методов для validates
.
Если вы посмотрите на источник, вы увидите, что validates
метод только что написан для обработки всех валидаторов, тогда как validates_confirmation_of
явно использует ConfirmationValidator
Я думаю, validates_confirmation_of
был введен в Rails 2, так что он существует довольно давно.
Sourceсравнение:
def validates_confirmation_of(*attr_names)
validates_with ConfirmationValidator, _merge_attributes(attr_names)
end
и
def validates(*attributes)
defaults = attributes.extract_options!
validations = defaults.slice!(*_validates_default_keys)
raise ArgumentError, "You need to supply at least one attribute" if attributes.empty?
raise ArgumentError, "You need to supply at least one validation" if validations.empty?
defaults.merge!(:attributes => attributes)
validations.each do |key, options|
# LOOK AT THIS LINE
key = "#{key.to_s.camelize}Validator"
begin
validator = key.include?('::') ? key.constantize : const_get(key)
rescue NameError
raise ArgumentError, "Unknown validator: '#{key}'"
end
# AND LOOK AT THIS LINE
validates_with(validator, defaults.merge(_parse_validates_options(options)))
end
end