Ruby On Rails中的ArgumentError(无效日期)

时间:2011-05-15 09:08:15

标签: ruby-on-rails

我收到此ArgumentError(无效日期)  错误,无法弄清楚是什么导致它。该方法是从javascript调用的。

  def loadDay
     @first_day_of_week = Date.strptime("{ params[:year].to_s, :params[:month].to_s, params[:day].to_s }", "{ %Y, %m, %d }")

     ...
  end

日志如下所示:

  Started GET "/planner/loadDay?day=7&month=5&year=2011" for 127.0.0.1 at 2011-05-15 10:19:43 +0200
  Processing by PlannerController#loadDay as */*
  Parameters: {"day"=>"7", "month"=>"5", "year"=>"2011"}
  Completed   in 1ms

请指出正确的方向。

1 个答案:

答案 0 :(得分:2)

#{}的第一个参数中,您缺少一些Date.strptime字符串插值。我想你的意思是这样说:

Date.strptime("{ #{params[:year]}, #{params[:month]}, #{params[:day]} }", "{ %Y, %m, %d }")

您的来电只是将此文字字符串传递给strptime

"{ params[:year].to_s, :params[:month].to_s, params[:day].to_s }"

并且,如果没有params取代的值,strptime不知道你在说什么,感到沮丧并提出ArgumentError例外以表示“无效日期”

您不需要to_s内的#{}次调用,因为#{}会为您执行此操作,params中的值无论如何都会成为字符串(当然,除非,你正在做一些超出Rails通常做的params的额外处理。