edge badge

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

Namespace
Methods
D
R
S
V
Included Modules
Instance Public methods
save(options={})

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

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

# File activerecord/lib/active_record/validations.rb, line 49
def save!(options={})
  perform_validations(options) ? super : raise_validation_error
end
valid?(context = nil)

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.

Also aliased as: validate
# File activerecord/lib/active_record/validations.rb, line 63
def valid?(context = nil)
  context ||= default_validation_context
  output = super(context)
  errors.empty? && output
end
validate(context = nil)
Alias for: valid?
Instance Protected methods
default_validation_context()
# File activerecord/lib/active_record/validations.rb, line 73
def default_validation_context
  new_record? ? :create : :update
end
raise_validation_error()
# File activerecord/lib/active_record/validations.rb, line 77
def raise_validation_error
  raise(RecordInvalid.new(self))
end