2011-05-15 64 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的正常進行一些額外的處理)。