Как написать собственный метод проверки с параметрами для моей модели ActiveRecord? - PullRequest
12 голосов
/ 20 сентября 2008

В моей модели у меня есть:

validate :my_custom_validation

def my_custom_validation
 errors.add_to_base("error message") if condition.exists?
end

Я хотел бы добавить некоторые параметры в mycustomer vaildation, например:

validate :my_custom_validation, :parameter1 => x, :parameter2 => y

Как мне написать функцию mycustomvalidation для учета параметров?

Ответы [ 2 ]

6 голосов
/ 20 сентября 2008

Валидаторы обычно имеют параметр массива, указывающий, во-первых, поля для проверки и, наконец, (если он существует) хеш с параметрами. В вашем примере:

: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
1 голос
/ 20 сентября 2008

Вы можете просто сделать что-то вроде этого:

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.

Добавлено: дополнительная информация в документации по Rails API здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...