module ActiveRecord::Validations
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 :create
or :update
dependent on whether the model is a new_record?.
Public Instance Methods
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 lib/active_record/validations.rb, line 46 def save(**options) perform_validations(options) ? super : false end
Attempts to save the record just like ActiveRecord::Base#save but will raise an ActiveRecord::RecordInvalid
exception instead of returning false
if the record is not valid.
# File 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, false
otherwise.
Aliased as validate
.
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 lib/active_record/validations.rb, line 66 def valid?(context = nil) context ||= default_validation_context output = super(context) errors.empty? && output end
Private Instance Methods
# File lib/active_record/validations.rb, line 75 def default_validation_context new_record? ? :create : :update end
# File lib/active_record/validations.rb, line 83 def perform_validations(options = {}) options[:validate] == false || valid?(options[:context]) end
# File lib/active_record/validations.rb, line 79 def raise_validation_error raise(RecordInvalid.new(self)) end