我是rails的初学者,我需要在我的控制器上比较2个DateTime:
__get__
但是我收到了这个错误:
@b = Book.find(params[:book][:id])
if @b.expiry_date > DateTime.now
... something here ...
end
任何人都知道为什么?
答案 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
如果所有图书都应该有到期日,那么您应该添加一个验证,在您的图书模型中创建/更新图书记录时,该验证会包含到期日期!