I have a very generic validator and I want to pass it arguments.
Here is an example model:
class User
include Mongoid::Document
field :order_type
has_many :orders, inverse_of :user
validates: orders, generic: true #i want to pass argument (order_type)
field :task_type
has_many :tasks, inverse_of :user
validates: tasks, generic: true #i want to pass argument (task_type)
end
and Example validator:
class GenericValidator < ActiveModel::EachValidator
def validate_each(object, attribute, value)
if some_validation?(object)
object.errors[attribute] << (options[:message] || "is not formatted properly")
end
end
end
Is there any way to pass arguments to the validator dependant on which field it is validating?
thanks
I wasn’t aware of this either, but if you want to pass an argument, then pass a hash to
generic:instead oftrue. This post details the exact process you’re wanting to follow:GenericValidatorshould now have access to both arguments you’re wanting to pass in validation:options[:order_type]andoptions[:task_type].It might make more sense, however, to divide these up into two validators, with both inheriting the shared behavior as mentioned by dpassage: