开发者

ArgumentError (invalid date) in Ruby On Rails

开发者 https://www.devze.com 2023-03-06 05:03 出处:网络
I\'m getting this ArgumentError (invalid date) error and can\'t figure out what\'s causing it. The method is called from javascript.

I'm getting this ArgumentError (invalid date) error and can't figure out what's causing it. The method is called from 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

The log looks like this:

  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 PlannerCo开发者_JAVA技巧ntroller#loadDay as */*
  Parameters: {"day"=>"7", "month"=>"5", "year"=>"2011"}
  Completed   in 1ms

Please point me in the right direction.


You're missing a few #{} for string interpolation in the first argument to Date.strptime. I think you mean to say this:

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

Your call was just passing this literal string to strptime:

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

and, without the values from params substituted in, strptime didn't know what you were talking, got upset, and raised an ArgumentError exception to indicate an "invalid date".

And you don't need the to_s calls inside #{} as #{} does that for you and the values in params will be strings anyway (unless, of course, you're doing some extra processing of params beyond what Rails normally does).

0

精彩评论

暂无评论...
验证码 换一张
取 消