【问题标题】:Validation errors always show验证错误总是显示
【发布时间】:2015-12-21 16:37:04
【问题描述】:

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

      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

感谢您的帮助

【问题讨论】:

  • 什么意思?我可以看到参数是直接从日志中发送的,并且我知道如果我手动更改无效年份的年份,它将被重置,如果它是有效年份则不是这种情况。我可以做更多吗?
  • 我的 ruby​​ 版本是 2.1,这个链接失效了。

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


【解决方案1】:

假设MENTEE_AGE_RANGE_MIN MENTEE_AGE_RANGE_MAX,您的代码将始终生成一个minimum 日期,该日期maximum 日期之后。因此,询问任何日期是否为between?(minimum, maximum)总是产生false

4.between?(3, 5) 将返回 true4.between?(5, 3) 将返回 false

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

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!

【讨论】:

  • 现在你这么说,似乎很明显。谢谢;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多