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 45 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 51 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 65 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