未定义的方法`to_date'为零:NilClass

时间:2016-02-11 11:31:09

标签: ruby-on-rails ruby activeadmin

我尝试使用try方法来修复错误,但它仍然不希望它能解决。

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

如何解决此错误?

4 个答案:

答案 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)