Как написать валидации Ruby on Rails, зависящие от нескольких атрибутов класса? - PullRequest
2 голосов
/ 04 мая 2011

Допустим, у меня есть класс модели с 3 атрибутами. Я хотел бы убедиться, что хотя бы один из трех присутствует.

Должен ли я написать собственную проверку для этого? Или есть способ сделать это с существующим помощником проверки?

Ответы [ 2 ]

3 голосов
/ 04 мая 2011

Для этого вам нужно написать собственный валидатор. Все, что вам нужно сделать, это подкласс ActiveModel::Validator и реализовать метод validate(record), который добавляет к хэшу записи errors в случае ошибки:

class YourValidator < ActiveModel::Validator
    def validate(record)
        if (your_failure_condition_here)
            record.errors[:base] << "Your error message"
        end
    end
end

А затем используйте валидатор в вашей модели следующим образом (при условии, что вы правильно загрузили свой класс валидатора):

class YourModel
    validates_with YourValidator
end
2 голосов
/ 05 мая 2011

Выборочная проверка в вашей модели будет, по моему мнению, самым чистым способом:

class Model
  validate :at_least_one_present

  def at_least_one_present
    if(they_dont_exist)
      errors.add("need at least one of these fields")
    end
  end
end

Ссылка: Создание пользовательских методов проверки

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