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不知道你在说什么,感到沮丧,并引发了一个ArgumentErrorexception来指示“无效日期”。

并且你不需要#{}里面的to_s调用,因为#{}为你做了这个,而params的值无论如何都是字符串(当然,除非你正在做一些额外的params处理,超出了Rails通常的做法) )。