Active Model Error

Represents one single error

Methods

Constants

CALLBACKS_OPTIONS = [:if, :unless, :on, :allow_nil, :allow_blank, :strict]
MESSAGE_OPTIONS = [:message]

Attributes

[R] attribute

The attribute of base which the error belongs to

[R] base

The object which the error belongs to

[R] options

The options provided when calling +errors#add+

[R] raw_type

The raw value provided as the second parameter when calling +errors#add+

[R] type

The type of error, defaults to :invalid unless specified

Class Public methods

new(base, attribute, type = :invalid, **options)

📝 Source code
# File activemodel/lib/active_model/error.rb, line 103
    def initialize(base, attribute, type = :invalid, **options)
      @base = base
      @attribute = attribute
      @raw_type = type
      @type = type || :invalid
      @options = options
    end
🔎 See on GitHub

Instance Public methods

detail()

Alias for: details

details()

Returns the error details.

error = ActiveModel::Error.new(person, :name, :too_short, count: 5)
error.details
# => { error: :too_short, count: 5 }
Also aliased as: detail
📝 Source code
# File activemodel/lib/active_model/error.rb, line 148
    def details
      { error: raw_type }.merge(options.except(*CALLBACKS_OPTIONS + MESSAGE_OPTIONS))
    end
🔎 See on GitHub

full_message()

Returns the full error message.

error = ActiveModel::Error.new(person, :name, :too_short, count: 5)
error.full_message
# => "Name is too short (minimum is 5 characters)"
📝 Source code
# File activemodel/lib/active_model/error.rb, line 158
    def full_message
      self.class.full_message(attribute, message, @base)
    end
🔎 See on GitHub

match?(attribute, type = nil, **options)

See if error matches provided attribute, type and options.

Omitted params are not checked for a match.

📝 Source code
# File activemodel/lib/active_model/error.rb, line 165
    def match?(attribute, type = nil, **options)
      if @attribute != attribute || (type && @type != type)
        return false
      end

      options.each do |key, value|
        if @options[key] != value
          return false
        end
      end

      true
    end
🔎 See on GitHub

message()

Returns the error message.

error = ActiveModel::Error.new(person, :name, :too_short, count: 5)
error.message
# => "is too short (minimum is 5 characters)"
📝 Source code
# File activemodel/lib/active_model/error.rb, line 134
    def message
      case raw_type
      when Symbol
        self.class.generate_message(attribute, raw_type, @base, options.except(*CALLBACKS_OPTIONS))
      else
        raw_type
      end
    end
🔎 See on GitHub

strict_match?(attribute, type, **options)

See if error matches provided attribute, type and options exactly.

All params must be equal to Error's own attributes to be considered a strict match.

📝 Source code
# File activemodel/lib/active_model/error.rb, line 183
    def strict_match?(attribute, type, **options)
      return false unless match?(attribute, type)

      options == @options.except(*CALLBACKS_OPTIONS + MESSAGE_OPTIONS)
    end
🔎 See on GitHub

Instance Protected methods

attributes_for_hash()

📝 Source code
# File activemodel/lib/active_model/error.rb, line 203
      def attributes_for_hash
        [@base, @attribute, @raw_type, @options.except(*CALLBACKS_OPTIONS)]
      end
🔎 See on GitHub