Подтвердить что ты не робот

Как написать собственный метод проверки с параметрами для моей модели 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 для учета параметров?

4b9b3361

Ответ 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 здесь.