繁体   English   中英

rails:nil:NilClass的未定义方法“>”

[英]rails : undefined method `>' for nil:NilClass

我是Rails的初学者,我需要在控制器上比较2 DateTime:

@b = Book.find(params[:book][:id])
if @b.expiry_date > DateTime.now
  ... something here ...
end

但是我得到这个错误:

undefined method `>' for nil:NilClass

有人知道为什么吗?

运算符是ruby中的方法,因此您undefined method '>' for nil:NilClass错误,表明此行上@b.expiry_date为nil: if @b.expiry_date > DateTime.now

如果存在@b.expiry_date则可以使用短路逻辑来评估条件。

if @b.expiry_date && (@b.expiry_date > DateTime.now)

if表达式仅在&&两面也都为true时才为true,因此如果第一个条件@b.expiry_date为false或nil,则(@b.expiry_date > DateTime.now)将不会执行。

否则,您将需要添加逻辑/验证以确保存在expiry_date

只需在if语句中添加一条检查记录是否为nil的检查,如下所示:

    @b = Book.find(params[:book][:id])
      if !@b.expiry_date.nil? && @b.expiry_date > DateTime.now
      ... something here ...
    end

如果所有书籍都应具有有效期限,则应添加一个验证,要求在您的书籍模型中创建/更新书籍记录时,必须包括有效期限!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2025 STACKOOM.COM