How do I write a custom validation method with parameters for my ActiveRecord model?

ruby, ruby-on-rails

Solution

Validators usualy have an array parameter indicating, first, the fields to validate and lastly (if it exists) a hash with the options. In your example:

:my_custom_validation, parameter1: x, parameter2: y

:my_custom_validation would be a field name, while parameter1: x, parameter2: y would be a hash:

{ parameter1: x, parameter2: y}

Therefore, you'd do something like:

def my_custom_validation(*attr)
    options = attr.pop if attr.last.is_a? Hash
    # do something with options
    errors.add_to_base("error message") if condition.exists?

end

Problem

In my model I have: ``` validate :my_custom_validation def my_custom_validation errors.add_to_base("error message") if condition.exists? end ``` I would like to add some parameters to mycustomer vaildation like so: ``` validate :my_custom_validation, :parameter1 => x, :parameter2 => y ``` How do I write the mycustomvalidation function to account for parameters?

Original source