Как написать собственный метод проверки с параметрами для моей модели ActiveRecord?
В моей модели у меня есть:
validate :my_custom_validation
def my_custom_validation
errors.add_to_base("error message") if condition.exists?
end
Я хотел бы добавить некоторые параметры в myclienter vaildation следующим образом:
validate :my_custom_validation, :parameter1 => x, :parameter2 => y
Как написать функцию mycustomvalidation для учета параметров?
Ответы
Ответ 1
Валидаторы обычно имеют параметр массива, указывающий, во-первых, поля для проверки и, наконец, (если они существуют) хеша с параметрами. В вашем примере:
:my_custom_validation, parameter1: x, parameter2: y
: my_custom_validation будет именем поля, а параметр1: x, параметр2: y будет хешем:
{ parameter1: x, parameter2: y}
Следовательно, вы бы сделали что-то вроде:
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
Ответ 2
Вы можете просто сделать что-то вроде этого:
def validate
errors.add('That particular field', 'can not be the value you presented') if !self.field_to_check.blank? && self.field_to_check == 'I AM COOL'
end
Не нужно ссылаться на ссылку, так как я считаю, что метод validate обрабатывается (если он существует) после любых валидаций validates_uniqueness_of-like.
Добавлено: дополнительная информация в документах Rails API здесь.