Валидация на основе другого поля в рельсах? - PullRequest
0 голосов
/ 11 февраля 2020

Концерн используется

Я получил 2 поля period и age

period can be (0,1,2)
enum period: %w(evergreen,long_term,short_term)
age can be (0,1)
enum age: %w(long_term, evergreen)

если age is long_term, то no может выбрать вечнозеленый из периода, присутствие не true всегда

Как я могу добавить такой вид проверки в рельсы с пользовательским сообщением "Вы не можете выбрать вечнозеленый, если age_ long_term", я пытаюсь

validates :period, if: :selection_rule?

def selection_rule
return if age == long_term && period != evergreen 
end

что должно быть правильным способом делать такого рода проверки?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

Для беспокойства вы можете попробовать следующее:

included do
  validate :age_period
end

private

def age_period
  errors.add(:period, "can't be selected if age is long_term") if age == long_term && period == evergreen
end
0 голосов
/ 11 февраля 2020

Вы можете добавить пользовательские сообщения об ошибках валидации в модели рельсов.

validate :age_period

def age_period
  errors.add(:period, "can't be selected for this age group") if age == long_term && period != evergreen 
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...