Rails 3 - проверка одного из двух полей завершена - PullRequest
14 голосов
/ 14 июля 2011

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

Я хотел бы добавить некоторую проверку в модель для согласованности с другими проверками., это гарантирует, что одно (но не оба) поля (идентификатор продукта или URL) были предоставлены при сохранении.

Есть ли способ проверки типа validates, или мне придется поставитьэта проверка где-то в контроллере вместо этого?

Ответы [ 2 ]

18 голосов
/ 14 июля 2011

Это довольно прямое подтверждение в модели:

validate :check_consistency

def check_consistency
  if product_id.blank? and url.blank?
   #one at least must be filled in, add a custom error message
   return false
  elsif !product_id.blank? and !url.blank?
   #both can't be filled in, add custom error message
   return false
  else
   return true
  end
end
6 голосов
/ 07 сентября 2012

Аналогичный ответ на выше, но это только исключение или, и если еще заявления не нужны

validate :check_consistency
def check consistency
  errors.add(:base, 'message') if product_id.blank? ^ url.blank?
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...