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)
我尝试了一个 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)