Module

ActiveRecord::Validations

Inheritance

Please do have a look at ActiveRecord::Validations::ClassMethods for a higher level of validations.

Active Records implement validation by overwriting Base#validate (or the variations, validate_on_create and validate_on_update). Each of these methods can inspect the state of the object, which usually means ensuring that a number of attributes have a certain value (such as not empty, within a given range, matching a certain regular expression).

Example:

  class Person < ActiveRecord::Base
    protected
      def validate
        errors.add_on_empty %w( first_name last_name )
        errors.add("phone_number", "has invalid format") unless phone_number =~ /[0-9]*/
      end

      def validate_on_create # is only run the first time a new object is saved
        unless valid_discount?(membership_discount)
          errors.add("membership_discount", "has expired")
        end
      end

      def validate_on_update
        errors.add_to_base("No changes have occurred") if unchanged_attributes?
      end
  end

  person = Person.new("first_name" => "David", "phone_number" => "what?")
  person.save                         # => false (and doesn't do the save)
  person.errors.empty?                # => false
  person.errors.count                 # => 2
  person.errors.on "last_name"        # => "can't be empty"
  person.errors.on "phone_number"     # => "has invalid format"
  person.errors.each_full { |msg| puts msg }
                                      # => "Last name can't be empty\n" +
                                      #    "Phone number has invalid format"

  person.attributes = { "last_name" => "Heinemeier", "phone_number" => "555-555" }
  person.save # => true (and person is now saved in the database)

An Errors object is automatically created for every Active Record.

Classes & Modules

Constants

Name   Description
VALIDATIONS = %w( validate validate_on_create validate_on_update )

Methods

Instance

Visibility Signature
public errors ()
public invalid? ()
public save_with_validation (perform_validation = true)
public save_with_validation! ()
public valid? ()
protected validate ()
protected validate_on_create ()
protected validate_on_update ()

Instance Method Detail

errors()

Returns the Errors object that holds all information about attribute error messages.

invalid?()

Performs the opposite of valid?. Returns true if errors were added, false otherwise.

save_with_validation(perform_validation = true)

The validation process on save can be skipped by passing false. The regular Base#save method is replaced with this when the validations module is mixed in, which it is by default.

save_with_validation!()

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.

valid?()

Runs validate and validate_on_create or validate_on_update and returns true if no errors were added otherwise false.

validate()

Overwrite this method for validation checks on all saves and use Errors.add(field, msg) for invalid attributes.

validate_on_create()

Overwrite this method for validation checks used only on creation.

validate_on_update()

Overwrite this method for validation checks used only on updates.