123456789_123456789_123456789_123456789_123456789_

Module: ActiveRecord::Validations

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 a new_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

Instance Method Summary

Instance Attribute Details

#custom_validation_context?Boolean (readonly)

This method is for internal use only.
[ GitHub ]

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

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 82

def default_validation_context
  new_record? ? :create : :update
end

#perform_validations(options = {}) (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/validations.rb', line 90

def perform_validations(options = {})
  options[:validate] == false || valid?(options[:context])
end

#raise_validation_error (private)

Raises:

[ GitHub ]

  
# File 'activerecord/lib/active_record/validations.rb', line 86

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 regular {ActiveRecord::Base#save} method is replaced with this when the validations module is mixed in, which it is by default.

[ GitHub ]

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

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

#save!(**options)

Attempts to save the record just like {ActiveRecord::Base#save} but will raise an RecordInvalid exception instead of returning false if the record is not valid.

[ GitHub ]

  
# 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.

[ GitHub ]

  
# File 'activerecord/lib/active_record/validations.rb', line 69

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

#validate(context = nil)

Alias for #valid?.

[ GitHub ]

  
# File 'activerecord/lib/active_record/validations.rb', line 75

alias_method :validate, :valid?