nil:NilClass 的未定义方法“to_date”

Undefined method `to_date' for nil:NilClass

我尝试了一个 try 方法来修复错误,但它仍然不希望它成功。

如果我不够具体,请告诉我。

如何解决这个错误?

一般来说,如果您看到消息说 "Undefined method 'foo' for nil:NilClass",则表示您正在对一个值为 nil 的对象调用方法 "foo"。就像 Ruby 中的所有内容一样,"nil" 是一个对象,它的 class 是 NilClass - 这就是消息的意思。

在这种情况下,所讨论的对象是 params[:date],因为这就是您调用 .to_date 方法的对象。 params 是一个散列(好吧,至少是一个类似散列的对象),如果你调用一个散列,它没有那个键,它 returns nil.

所以,你的问题是你期望 params[:date] 有东西在里面,但它没有。

也许你应该处理没有给出参数 :date 的情况。也许使用这样的默认值:

if params.has_key?(:date) 
  date = DateTime.parse(params[:date])
else 
  date = DateTime.now
end
po_id = CardApplicationTrack.where(
  :batched_for_payment => true, 
  :admin_user_id => params[:admin_user_id].to_i, 
  :created_at => 
    date.beginning_of_day ..
    date.end_of_day
).map { |cat| cat.processing_order_id }

或者,如果缺少 params[:date],则告诉用户您没有输入日期。

您也可以使用.try方法,试试下面的方法。

date = params[:date].try(:to_date) || DateTime.now

po_id = CardApplicationTrack.where(
  batched_for_payment: true, 
  admin_user_id: params[:admin_user_id].to_i, 
  created_at: date.beginning_of_day..date.end_of_day
).pluck(:processing_order_id)

这不会引发错误。

参数[:日期].try(:to_date).try(:end_of_day)