簡體   English   中英

NoMethodError: 未定義方法 `<' 為 nil:NilClass

[英]NoMethodError: undefined method `<' for 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 中的方法。 這段代碼:

valid_to < valid_from

只是語法糖

valid_to.<(valid_from)

錯誤消息幾乎不言自明,您必須確保valid_tovalid_from不是nil ,例如使用保護子句,即像這樣:

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

  # rest of the code
end

首先,您需要檢查 valid from 或 valid to 是否為空白。 然后您可以檢查該值是小於還是大於 。

def to_must_be_after_from

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

  if valid_from < Date.today
    errors.add(:base, "You can't select past dates in valid from")
  elsif valid_to < valid_from
    errors.add(:base, "valid to can't be before the valid from date")
  end
end

根據錯誤消息-

您正在嘗試比較其中one variable is nil 在檢查驗證之前,您能否檢查valid_tovalid_from是否具有正確的值 - if valid_to < valid_from

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM