我尝试使用try方法来修复错误,但它仍然不希望它能解决。
如果我不够具体,请告诉我。
如何解决此错误?
答案 0 :(得分:2)
一般来说,如果你看到一条消息“nil:NilClass的未定义方法'foo'”,则表示你在一个值为nil的对象上调用方法“foo”。像Ruby中的所有内容一样,“nil”是一个对象,它的类是NilClass - 这就是消息的含义。
在这种情况下,有问题的对象是params[:date]
,因为这就是您调用.to_date
方法的内容。 params
是一个哈希(好吧,至少是一个类似哈希的对象),并且使用哈希,如果你在其上调用一个键并且没有该键,它将返回nil
。< / p>
所以,你的问题是你期望params[:date]
有一些东西,而不是。
答案 1 :(得分:1)
也许您应该在没有给出参数: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 }
或者告诉用户如果缺少参数[:date],则没有输入日期。
答案 2 :(得分:1)
您也可以使用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)
方法,请尝试以下操作。
{{1}}
答案 3 :(得分:0)
这不会引发错误。
PARAMS [:日期]。尝试(:TO_DATE)。尝试(:end_of_day)