2011-05-15 62 views
1

我收到此ArgumentError(无效日期) 错误,无法找出导致它的原因。该方法从JavaScript调用。Ruby On Rails中的参数错误(无效日期)

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 

请点我在正确的方向。

+0

你可以请张贴的痕迹? – 2011-05-15 09:12:18

+0

你不需要建立一个字符串,然后解析它(你正在做和扭转你的工作)。如果你使用'Date.new(params [:year],::params [:month],params [:day])''会更容易和更快速。 – eloyesp 2014-11-11 14:42:50

回答

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值将是字符串无论如何(除非,当然,你做的params超出了Rails的正常进行一些额外的处理)。