Flowdock
validates_with(*args, &block) public

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[: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 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 =&gt; :allow_validation, or :if =&gt; Proc.new { |user| user.signup_step &gt; 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 =&gt; :skip_validation, or :unless =&gt; Proc.new { |user| user.signup_step &lt;= 2 }). The method, proc or string should return or evaluate to a true or false value.

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
Show source
Register or log in to add new notes.