我有一个始终显示的日期的验证码,条件是真还是假。它被称为这种方式。
validate :ensure_birth_date_range, if: lambda { mentee? && born_on.present? }
# Check if the year of birth is in range
def ensure_birth_date_range
minimum = Application::MENTEE_AGE_RANGE_MIN.years.ago
maximum = Application::MENTEE_AGE_RANGE_MAX.years.ago
errors.add(:born_on, :invalid) unless born_on.between?(minimum, maximum)
end
感谢您的帮助
答案 0 :(得分:0)
假设MENTEE_AGE_RANGE_MIN
< MENTEE_AGE_RANGE_MAX
,您的代码将始终生成minimum
日期 maximum
日期之后。因此,询问任何日期是between?(minimum, maximum)
总是会产生false
。
4.between?(3, 5)
将返回true
但是
4.between?(5, 3)
将返回false
。
交换min和max应该这样做:
def ensure_birth_date_range
earliest = Application::MENTEE_AGE_RANGE_MAX.years.ago
latest = Application::MENTEE_AGE_RANGE_MIN.years.ago
errors.add(:born_on, :invalid) unless born_on.between?(earliest, latest)
end
HTH!