Adds ActiveModel::Errors#details to return type of used validator - Backport from Rails 5.0
Ruby
Latest commit 07e02c4 Aug 3, 2016 @morgoth morgoth Bump version to 1.3.1

README.md

ActiveModel::Errors#details

Build Status

Feature backported from Rails 5.0 to use with Rails 3.2.x and 4.x apps.

Background: https://github.com/rails/rails/pull/18322

Installation

gem install "active_model-errors_details"

Usage

To check what validator type was used on invalid attribute, you can use errors.details[:attribute]. It returns array of hashes where under :error key you will find symbol of used validator.

class Person < ActiveRecord::Base
  validates :name, presence: true
end

person = Person.new
person.valid?
person.errors.details[:name]
# => [{error: :blank}]

You can add validator type to details hash when using ActiveModel::Errors.add method.

class User < ActiveRecord::Base
  validate :adulthood

  def adulthood
    errors.add(:age, :too_young) if age < 18
  end
end

user = User.new(age: 15)
user.valid?
user.errors.details
# => {age: [{error: :too_young}]}

To improve error details to contain additional options, you can pass them to ActiveModel::Errors.add method.

class User < ActiveRecord::Base
  validate :adulthood

  def adulthood
    errors.add(:age, :too_young, years_limit: 18) if age < 18
  end
end

user = User.new(age: 15)
user.valid?
user.errors.details
# => {age: [{error: :too_young, years_limit: 18}]}

All built in Rails validators populate details hash with corresponding validator types.