2013-11-11 3 views
1

Мои пользователи могут выбирать между использованием URL-адреса изображения или загрузкой изображения. Однако один из них необходим.validates_presence_of, если другое не пусто

Как использовать validates_presence_of :url с «если не используется :image». И наоборот.

Мне удалось заставить это работать; Но, очевидно, это не сработает. Потому что он добавит проверку, если другой нет. Я смущен тем, как получить ТОЛЬКО ОДИН из обоих для ввода.

validates_presence_of  :url, if: Proc.new { |a| a.pictogram.blank? } 
validates_presence_of  :pictogram, if: Proc.new { |a| a.url.blank? } 

EDIT: Я установил его с

validate :addImageValidation

def addImageValidation 
    if !url.blank? && !image.blank? 
     errors.add(:image, "both not empty") 
    end 
end 
+0

Вы можете использовать меньшее количество операторов ', если URL .blank? == image.blank? ', проще читать таким образом. – jimworm

ответ

1

Вы можете написать свой собственный валидатор:

validate :url_or_pictogram_but_not_both 

def url_or_pictogram_but_not_both 
    unless url^pictogram 
    errors.add ... 
    end 
end 
+0

Что делает^делать? – CaptainCarl

+0

Это оператор xor. Исключительно - или: одно и только одно из значений должно быть истинным. – jimworm

Смежные вопросы