Ответ 1
Я считаю, что это то, что вы ищете:
class Call < ActiveRecord::Base
validate :location_id_or_other
def location_id_or_other
if location_id.blank? && location_other.blank?
errors.add(:location_other, 'needs to be present if location_id is not present')
end
end
end
location_id_or_other
- это специальный метод проверки, который проверяет, пустыми ли location_id
и location_other
. Если они оба, то он добавляет ошибку проверки. Если присутствие location_id
и location_other
является исключительным или, то есть только один из двух может присутствовать, а не один, а не оба, то вы можете внести следующее изменение в блок if
в методе.
if location_id.blank? == location_other.blank?
errors.add(:location_other, "must be present if location_id isn't, but can't be present if location_id is")
end
Альтернативное решение
class Call < ActiveRecord::Base
validates :location_id, presence: true, unless: :location_other
validates :location_other, presence: true, unless: :location_id
end
Это решение (только) работает, если присутствие location_id
и location_other
является исключительным или.
Ознакомьтесь с руководством по проверке Rails для получения дополнительной информации.