rails:undefined方法`>'为零:NilClass

时间:2016-05-08 16:52:19

标签: ruby-on-rails datetime controller

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

__get__

但是我收到了这个错误:

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

任何人都知道为什么?

2 个答案:

答案 0 :(得分:3)

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

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

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

if表达式仅在&&的两边都为真时才为真,因此如果第一个条件(@b.expiry_date > DateTime.now)为false或为零,则不会执行@b.expiry_date

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

答案 1 :(得分:0)

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

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

如果所有图书都应该有到期日,那么您应该添加一个验证,在您的图书模型中创建/更新图书记录时,该验证会包含到期日期!