Rails 3 - завершено одно из двух полей

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

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

Есть ли способ validates -type, чтобы проверить это, или я должен поместить эту проверку где-нибудь в контроллере вместо этого?

Ответы

Ответ 1

Это довольно простая проверка в модели:

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

Ответ 2

Подобный ответ выше, но это просто эксклюзивные или, если еще не нужны выражения

validate :check_consistency
def check consistency
  errors.add(:base, 'message') if product_id.blank? ^ url.blank?
end