Rails: How to list all validations on a model or an attribute

Posted . Visible to the public.

If a model inherits from others or uses many concerns / traits, it might be hard to see in the code which validators it has.
But fortunately there's a method for that:

irb(main):002:0> pp UserGroup.validators
[#<ActiveModel::Validations::InclusionValidator:0x00007f55efff97a8
  @attributes=[:deleted],
  @delimiter=[true, false],
  @options={:in=>[true, false], :allow_nil=>false}>,
 #<ActiveModel::Validations::InclusionValidator:0x00007f55f15748d0
  @attributes=[:cancelled],
  @delimiter=[true, false],
  @options={:in=>[true, false], :allow_nil=>false}>,
 #<ActiveRecord::Validations::PresenceValidator:0x00007f55f023d898
  @attributes=[:partner],
  @options={:message=>:required}>,
 #<ActiveRecord::Validations::PresenceValidator:0x00007f55f023c6f0
  @attributes=[:partner_id, :name],
  @options={}>,
 #<ActiveRecord::Validations::UniquenessValidator:0x00007f55f1417e88
  @attributes=[:name],
  @klass=UserGroup (call 'UserGroup.connection' to establish a connection),
  @options={:case_sensitive=>true, :scope=>:partner_id}>,
 #<ActiveModel::Validations::NumericalityValidator:0x00007f55f1415200
  @attributes=[:user_count_limit],
  @options={:greater_than_or_equal_to=>0, :allow_nil=>true}>]

You can also list all validators on a given attribute of a model:

irb(main):003:0> pp UserGroup.validators_on(:name)
[#<ActiveRecord::Validations::PresenceValidator:0x00007f55f023c6f0
  @attributes=[:partner_id, :name],
  @options={}>,
 #<ActiveRecord::Validations::UniquenessValidator:0x00007f55f1417e88
  @attributes=[:name],
  @klass=UserGroup (call 'UserGroup.connection' to establish a connection),
  @options={:case_sensitive=>true, :scope=>:partner_id}>]
Profile picture of Judith Roth
Judith Roth
Last edit
Judith Roth
License
Source code in this card is licensed under the MIT License.
Posted by Judith Roth to makandra dev (2020-09-23 12:14)