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