代码之家  ›  专栏  ›  技术社区  ›  Jean-Baptiste

始终显示验证错误

  •  0
  • Jean-Baptiste  · 技术社区  · 9 年前

    我有一个总是显示日期的验证代码,无论条件是真是假。这是这样称呼的。

          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 回复  |  直到 9 年前
        1
  •  0
  •   Raffael    9 年前

    假设 MENTEE_AGE_RANGE_MIN < MENTEE_AGE_RANGE_MAX ,您的代码将 总是 产生一个 minimum 日期 之后 这个 maximum 日期因此,询问是否有任何日期 between?(minimum, maximum) 总是 产量 false .

    4.between?(3, 5) 将返回 true 但是 4.between?(5, 3) 将返回 .

    交换最小值和最大值应该这样做:

    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
    

    哈!