instance method add

Ruby on Rails edge

Since v3.0.20

Available in: v3.0.20 v3.1.12 v3.2.22.5 v4.0.13 v4.1.16 v4.2.11.3 v5.0.7.2 v5.1.7 v5.2.8.1 v6.0.6.1 v6.1.7.10 v7.0.10 v7.1.6 v7.2.4 v8.0.5.1 v8.1.4 edge

Signature

add(attribute, type = :invalid, **options)

Adds a new error of type on attribute.

More than one error can be added to the same `attribute`.
If no `type` is supplied, `:invalid` is assumed.

```
person.errors.add(:name)
# Adds <#ActiveModel::Error attribute=name, type=invalid>
person.errors.add(:name, :not_implemented, message: "must be implemented")
# Adds <#ActiveModel::Error attribute=name, type=not_implemented,
                            options={:message=>"must be implemented"}>

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

If `type` is a string, it will be used as error message.

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

```
person.errors.add(:name, :blank)
person.errors.messages
# => {:name=>["can't be blank"]}

person.errors.add(:name, :too_long, count: 25)
person.errors.messages
# => {:name=>["is too long (maximum is 25 characters)"]}
```

If `type` 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}]}
```

: (Symbol | String, ?untyped, **untyped) -> ActiveModel::Error

Parameters

attribute req
type opt = :invalid
options keyrest
Source
# File activemodel/lib/active_model/errors.rb, line 392
    def add(attribute, type = :invalid, **options)
      attribute, type, options = normalize_arguments(attribute, type, **options)
      error = Error.new(@base, attribute, type, **options)

      if exception = options[:strict]
        exception = ActiveModel::StrictValidationFailed if exception == true
        raise exception, error.full_message
      end

      @errors.append(error)

      error
    end

Defined in activemodel/lib/active_model/errors.rb line 392 · View on GitHub · Improve this page · Find usages on GitHub

Defined in ActiveModel::Errors

Type at least 2 characters to search.

Use the arrow keys to navigate results, Enter to open one, Escape to close.

Keyboard shortcuts

/
Focus search
⌘K / Ctrl-K
Command palette
?
This help
Esc
Close