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

Methods
P
S
V
Included Modules
Classes and Modules
Instance Public methods
save(options={})

The validation process on save can be skipped by passing :validate => false. The regular 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 49
49:     def save(options={})
50:       perform_validations(options) ? super : false
51:     end
save!(options={})

Attempts to save the record just like Base#save but will raise a RecordInvalid exception instead of returning false if the record is not valid.

    # File activerecord/lib/active_record/validations.rb, line 55
55:     def save!(options={})
56:       perform_validations(options) ? super : raise(RecordInvalid.new(self))
57:     end
valid?(context = nil)

Runs all the validations within the specified context. Returns true if no errors are found, false otherwise.

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 activerecord/lib/active_record/validations.rb, line 67
67:     def valid?(context = nil)
68:       context ||= (new_record? ? :create : :update)
69:       output = super(context)
70:       errors.empty? && output
71:     end
Instance Protected methods
perform_validations(options={})
    # File activerecord/lib/active_record/validations.rb, line 75
75:     def perform_validations(options={})
76:       perform_validation = options[:validate] != false
77:       perform_validation ? valid?(options[:context]) : true
78:     end