首页 > 解决方案 > NoMethodError: nil:NilClass 的未定义方法 `<'

问题描述

我在创建优惠券时在我的应用程序中添加自定义验证,优惠券有效期的开始日期应在结束日期之前。

validate :to_must_be_after_from

private
    def to_must_be_after_from
      if valid_to < valid_from
        self.errors[:base] << "Coupon cannot expire before the start of its validity period."
      end
    end

valid_to 和 valid_from 是日期字段。


当我运行它时,发生了 NoMethodError 。我对此有以下问题,

  1. '<' 是一个运算符而不是一个函数,那么这样的错误是如何发生的。
  2. 如何解决此问题并使代码正常运行。

标签: ruby-on-railsvalidationmodel

解决方案


大多数运算符实际上是 Ruby 中的方法。这段代码:

valid_to < valid_from

只是语法糖

valid_to.<(valid_from)

错误消息几乎是不言自明的,你必须确保valid_tovalid_fromare not nil,使用保护子句,例如,像这样:

def to_must_be_after_from
  return if valid_to.blank? || valid_from.blank?

  # rest of the code
end

推荐阅读