модуль ActiveRecord::Validations
Валидация Active Record
Active Record включает большинство своих валидаций из ActiveModel::Validations, все из которых принимают аргумент :on для определения контекста, в котором валидации активны. Active Record всегда предоставляет либо контекст :create или :update, в зависимости от того, является ли модель новой записью?.
Открытые методы экземпляров
# File activerecord/lib/active_record/validations.rb, line 43
def save(options={})
perform_validations(options) ? super : false
end Процесс валидации при сохранении можно пропустить, передав validate:
false. Регулярный метод ActiveRecord::Base#save заменяется этим методом, когда в модуль включены валидации, что по умолчанию происходит.
# File activerecord/lib/active_record/validations.rb, line 49
def save!(options={})
perform_validations(options) ? super : raise_validation_error
end Пытается сохранить запись так же, как и ActiveRecord::Base#save, но при этом вызовет исключение ActiveRecord::RecordInvalid вместо возврата false, если запись не валидна.
# File activerecord/lib/active_record/validations.rb, line 63 def valid?(context = nil) context ||= default_validation_context output = super(context) errors.empty? && output end
Выполняет все валидации в указанном контексте. Возвращает true, если ошибки не обнаружены, false, в противном случае.
Алиас метода validate.
Если аргумент false (по умолчанию nil), контекст устанавливается в :create, если new_record? является true, и в :update, если нет.
Валидации без опции :on будут выполняться независимо от контекста. Валидации с опцией :on будут выполняться только в указанном контексте.
Защищённые методы экземпляров
# File activerecord/lib/active_record/validations.rb, line 73 def default_validation_context new_record? ? :create : :update end
# File activerecord/lib/active_record/validations.rb, line 77 def raise_validation_error raise(RecordInvalid.new(self)) end
© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.