ruby-on-rails - 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 。我对此有以下问题,
- '<' 是一个运算符而不是一个函数,那么这样的错误是如何发生的。
- 如何解决此问题并使代码正常运行。
解决方案
大多数运算符实际上是 Ruby 中的方法。这段代码:
valid_to < valid_from
只是语法糖
valid_to.<(valid_from)
错误消息几乎是不言自明的,你必须确保valid_to
和valid_from
are not nil
,使用保护子句,例如,像这样:
def to_must_be_after_from
return if valid_to.blank? || valid_from.blank?
# rest of the code
end
推荐阅读
- javascript - 我需要什么来获取li项的内容
- python - 根据 Pandas 中的字段条件显示选定的列
- javascript - 如何在 JavaScript console.log() 中打印出 [{ 和 }],而网页中没有 ["{ 和 }"]?
- angular - 如何根据单击的锚链接打开文件资源管理器以查看 Angular 8 中的文件
- android - 某些版本的android中ARGB_8888和黑色背景的问题
- kotlin - 当使用两个包含相同类文件的 SDK 的 .aar 文件时,如何在 Kotlin 中解决这个重复的类?
- kotlin - 将枚举序列化为整数值
- sql - SQL 从 PHP 序列化数组中选择 id
- flutter - Sliverappbar 与 body 中的内容重叠(Flutter)
- python - Matplotlib:如何在一张图上绘制多条线