add(attribute, message = :invalid, options = {}) public

Adds message to the error messages and used validator type to details on attribute. More than one error can be added to the same attribute. If no message is supplied, :invalid is assumed.

person.errors.add(:name)
# => ["is invalid"]
person.errors.add(:name, :not_implemented, message: "must be implemented")
# => ["is invalid", "must be implemented"]

person.errors.messages
# => {:name=>["is invalid", "must be implemented"]}

person.errors.details
# => {:name=>[{error: :not_implemented}, {error: :invalid}]}

If message is a symbol, it will be translated using the appropriate scope (see generate_message).

If message is a proc, it will be called, allowing for things like Time.now to be used within an error.

If the :strict option is set to true, it will raise ActiveModel::StrictValidationFailed instead of adding the error. :strict option can also be set to any other exception.

person.errors.add(:name, :invalid, strict: true)
# => ActiveModel::StrictValidationFailed: name is invalid
person.errors.add(:name, :invalid, strict: NameIsInvalid)
# => NameIsInvalid: name is invalid

person.errors.messages # => {}

attribute should be set to :base if the error is not directly associated with a single attribute.

person.errors.add(:base, :name_or_email_blank,
  message: "either name or email must be present")
person.errors.messages
# => {:base=>["either name or email must be present"]}
person.errors.details
# => {:base=>[{error: :name_or_email_blank}]}
Show source
Register or log in to add new notes.
September 14, 2011
2 thanks

More on add_to_base

Actually, use

model_instance.errors.add :base, :invalid

to have I18n working.

August 13, 2010
0 thanks

Depracated add_to_base

use

model_instance.errors[:base] << "Msg" 

instead of depracated

model_instance.errors.add_to_base("Msg")

for Rails 3