验证错误始终显示

时间:2015-12-21 16:37:04

标签: ruby-on-rails validation ruby-on-rails-4

我有一个始终显示的日期的验证码,条件是真还是假。它被称为这种方式。

      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

感谢您的帮助

1 个答案:

答案 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!