validates_with

validates_with(*args, &block)
Instance Public methods

Passes the record off to the class or classes specified and allows them to add errors based on more complex conditions.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Person
  include ActiveModel::Validations
  validates_with MyValidator
end
 
class MyValidator < ActiveModel::Validator
  def validate(record)
    if some_complex_logic
      record.errors.add :base, 'This record is invalid'
    end
  end
 
  private
    def some_complex_logic
      # ...
    end
end

You may also pass it multiple classes, like so:

1
2
3
4
class Person
  include ActiveModel::Validations
  validates_with MyValidator, MyOtherValidator, on: :create
end

Configuration options:

  • :on - Specifies when this validation is active (:create or :update.

  • :if - Specifies a method, proc or string to call to determine if the validation should occur (e.g. if: :allow_validation, or if: Proc.new { |user| user.signup_step > 2 }). The method, proc or string should return or evaluate to a true or false value.

  • :unless - Specifies a method, proc or string to call to determine if the validation should not occur (e.g. unless: :skip_validation, or unless: Proc.new { |user| user.signup_step <= 2 }). The method, proc or string should return or evaluate to a true or false value.

  • :strict - Specifies whether validation should be strict. See ActiveModel::Validation#validates! for more information.

If you pass any additional configuration options, they will be passed to the class and available as options:

1
2
3
4
5
6
7
8
9
10
class Person
  include ActiveModel::Validations
  validates_with MyValidator, my_custom_key: 'my custom value'
end
 
class MyValidator < ActiveModel::Validator
  def validate(record)
    options[:my_custom_key] # => "my custom value"
  end
end
doc_ruby_on_rails
2025-01-10 15:47:30
Comments
Leave a Comment

Please login to continue.