Module: ActiveRecord::Validations

Extended by:
ActiveSupport::Concern
Included in:
Base
Defined in:
activerecord/lib/active_record/validations.rb,
activerecord/lib/active_record/validations/length.rb,
activerecord/lib/active_record/validations/absence.rb,
activerecord/lib/active_record/validations/presence.rb,
activerecord/lib/active_record/validations/associated.rb,
activerecord/lib/active_record/validations/uniqueness.rb,
activerecord/lib/active_record/validations/numericality.rb

Overview

Active Record Validations

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 a new_record?.

Defined Under Namespace

Modules: ClassMethods Classes: AbsenceValidator, AssociatedValidator, LengthValidator, NumericalityValidator, PresenceValidator, UniquenessValidator

Instance Method Summary collapse

Methods included from ActiveSupport::Concern

append_features, class_methods, extended, included, prepend_features, prepended

Instance Method Details

#custom_validation_context?Boolean

:nodoc:

Returns:

  • (Boolean)


77
78
79
# File 'activerecord/lib/active_record/validations.rb', line 77

def custom_validation_context? # :nodoc:
  validation_context && [:create, :update].exclude?(validation_context)
end

#save(**options) ⇒ Object

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.



47
48
49
# File 'activerecord/lib/active_record/validations.rb', line 47

def save(**options)
  perform_validations(options) ? super : false
end

#save!(**options) ⇒ Object

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.



53
54
55
# File 'activerecord/lib/active_record/validations.rb', line 53

def save!(**options)
  perform_validations(options) ? 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 if new_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.

Returns:

  • (Boolean)


69
70
71
72
73
# File 'activerecord/lib/active_record/validations.rb', line 69

def valid?(context = nil)
  context ||= default_validation_context
  output = super(context)
  errors.empty? && output
end