Где и как сделать пользовательскую проверку на моделях? - PullRequest
3 голосов
/ 22 сентября 2010

Допустим, у нас есть простая модель, которая хранит два целых числа, минимальное и максимальное. Мы хотели бы заставить min <= max.

class MinMax
  include MongoMapper::Document

  key :min, Integer
  key :max, Integer

  validate_presence_of :min, :max
end

1) Как бы вы подтвердили, что min действительно равен или меньше max?

2) Если вы не считаете, что ответственность лежит на модели, то где и кому следует проводить эту проверку?

Ответы [ 3 ]

2 голосов
/ 22 сентября 2010

Я отвечу на ваши вопросы в обратном порядке.Для вопроса 2, такие проверки, как это абсолютно ответственность за модель.Практически все, что является основной логикой вашей программы, принадлежит вашим моделям;контроллеры предназначены только для сопоставления HTTP-запросов с соответствующими методами модели.

Для 1 просто используйте validates для вызова пользовательского метода проверки

validates :valid_range

def valid_range
  min <= max
end

Если вы хотите получить собственное сообщение об ошибкедобавьте сообщение об ошибке явно в проверку:

validate :valid_range

def valid_range
  errors.add_to_base("Not a valid range") unless min <= max
end
2 голосов
/ 22 сентября 2010
validates :min_le_max

def min_le_max
  self.min <= self.max
end
1 голос
/ 16 ноября 2010

Метод уровня класса validate, а не validates ...

...