Active Record Validations
Active Record includes the majority of its validations from
ActiveModel::Validations all of which accept the
:on argument to define the context where the validations are active. Active Record will always supply either the context of
:update dependent on whether the model is a new_record?.
The validation process on save can be skipped by passing
validate: false. The validation context can be changed by passing
context: context. The regular ActiveRecord::Base#save method is replaced with this when the validations module is mixed in, which it is by default.
# File activerecord/lib/active_record/validations.rb, line 46 def save(**options) perform_validations(options) ? super : false end
# File activerecord/lib/active_record/validations.rb, line 52 def save!(**options) perform_validations(options) ? super : raise_validation_error end
Runs all the validations within the specified context. Returns
true if no errors are found,
If the argument is
false (default is
nil), the context is set to
:create if new_record? is
true, and to
:update if it is not.
Validations with no
:on option will run no matter the context. Validations with some
:on option will only run in the specified context.
# File activerecord/lib/active_record/validations.rb, line 66 def valid?(context = nil) context ||= default_validation_context output = super(context) errors.empty? && output end