instance method
validates_with
Ruby on Rails 4.2.9
Since v3.0.20Signature
validates_with(*args, &block)
Passes the record off to the class or classes specified and allows them to add errors based on more complex conditions.
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:
class Person include ActiveModel::Validations validates_with MyValidator, MyOtherValidator, on: :create end
Configuration options:
-
:on- Specifies the contexts where this validation is active. Runs in all validation contexts by default (nil). You can pass a symbol or an array of symbols. (e.g.on: :createoron: :custom_validation_contextoron: [:create, :custom_validation_context]) -
:if- Specifies a method, proc or string to call to determine if the validation should occur (e.g.if: :allow_validation, orif: Proc.new { |user| user.signup_step > 2 }). The method, proc or string should return or evaluate to atrueorfalsevalue. -
:unless- Specifies a method, proc or string to call to determine if the validation should not occur (e.g.unless: :skip_validation, orunless: Proc.new { |user| user.signup_step <= 2 }). The method, proc or string should return or evaluate to atrueorfalsevalue. -
:strict- Specifies whether validation should be strict. SeeActiveModel::Validation#validates!for more information.
If you pass any additional configuration options, they will be passed to the class and available as options:
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
Parameters
-
argsrest -
blockblock
Source
# File activemodel/lib/active_model/validations/with.rb, line 87
def validates_with(*args, &block)
options = args.extract_options!
options[:class] = self
args.each do |klass|
validator = klass.new(options, &block)
if validator.respond_to?(:attributes) && !validator.attributes.empty?
validator.attributes.each do |attribute|
_validators[attribute.to_sym] << validator
end
else
_validators[nil] << validator
end
validate(validator, options)
end
end
Defined in activemodel/lib/active_model/validations/with.rb line 87
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in ActiveModel::Validations::ClassMethods