Ruby On Rails中的ArgumentError(无效日期)
我收到此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
请指出我正确的方向。
你在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
exception来指示“无效日期”。
并且你不需要#{}
里面的to_s
调用,因为#{}
为你做了这个,而params
的值无论如何都是字符串(当然,除非你正在做一些额外的params
处理,超出了Rails通常的做法) )。