Module: ActiveRecord::Validations
| Relationships & Source Files | |
| Namespace Children | |
|
Modules:
| |
|
Classes:
| |
| Extension / Inclusion / Inheritance Descendants | |
|
Included In:
| |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
self,
::ActiveSupport::Concern
|
|
|
Instance Chain:
|
|
| Defined in: | activerecord/lib/active_record/validations.rb, activerecord/lib/active_record/validations/absence.rb, activerecord/lib/active_record/validations/associated.rb, activerecord/lib/active_record/validations/length.rb, activerecord/lib/active_record/validations/presence.rb, activerecord/lib/active_record/validations/uniqueness.rb |
Overview
==========================
Active Record includes the majority of its validations from ::ActiveModel::Validations.
In Active Record, all validations are performed on save by default.
Validations accept the :on argument to define the context where
the validations are active. Active Record will pass either the context of
:create or :update depending on whether the model is anew_record?.
Class Method Summary
::ActiveSupport::Concern - Extended
| class_methods | Define class methods from given block. |
| included | Evaluate given block in context of base class, so that you can write class macros here. |
| prepended | Evaluate given block in context of base class, so that you can write class macros here. |
| append_features, prepend_features | |
Instance Attribute Summary
- #custom_validation_context? ⇒ Boolean readonly Internal use only
Instance Method Summary
-
#save(**options)
The validation process on save can be skipped by passing
validate: false. -
#save!(**options)
Attempts to save the record just likeActiveRecord::Base#save but will raise an
RecordInvalidexception instead of returningfalseif the record is not valid. -
#valid?(context = nil) ⇒ Boolean
(also: #validate)
Runs all the validations within the specified context.
-
#validate(context = nil)
Alias for #valid?.
- #default_validation_context private
- #perform_validations(options = {}) private
- #raise_validation_error private
Instance Attribute Details
#custom_validation_context? ⇒ Boolean (readonly)
# File 'activerecord/lib/active_record/validations.rb', line 89
def custom_validation_context? # :nodoc: validation_context && [:create, :update].exclude?(validation_context) end
Instance Method Details
#default_validation_context (private)
[ GitHub ]# File 'activerecord/lib/active_record/validations.rb', line 94
def default_validation_context new_record? ? :create : :update end
#perform_validations(options = {}) (private)
[ GitHub ]#raise_validation_error (private)
# File 'activerecord/lib/active_record/validations.rb', line 98
def raise_validation_error raise(RecordInvalid.new(self)) end
#save(**options)
The validation process on save can be skipped by passing validate: false.
The validation context can be changed by passing context: context.
The regularActiveRecord::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 59
def save(**) perform_validations() ? super : false end
#save!(**options)
Attempts to save the record just likeActiveRecord::Base#save but
will raise an RecordInvalid exception instead of returning false if the record is not valid.
# File 'activerecord/lib/active_record/validations.rb', line 65
def save!(**) perform_validations() ? super : raise_validation_error end
#valid?(context = nil) ⇒ Boolean
Also known as: #validate
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 ifnew_record? is true, and to :update if it is not.
If the argument is an array of contexts, post.valid?([:create, :update]), the validations are
run within multiple contexts.
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 81
def valid?(context = nil) context ||= default_validation_context output = super(context) errors.empty? && output end
#validate(context = nil)
Alias for #valid?.
# File 'activerecord/lib/active_record/validations.rb', line 87
alias_method :validate, :valid?