在这行代码中:
@note.date = Date.strptime(params[:custom_date], '%d-%m-%Y') unless params[:custom_date].blank?
我收到此错误:
ArgumentError: invalid date
/usr/ruby1.9.2/lib/ruby/1.9.1/date.rb:1022
以下是参数:
{
"commit" => "Create",
"utf8" => "\342\234\223",
"authenticity_token" => "RKYZNmRaElg/hT5tlmLcqnstnOapdhiaWmDcjNDtSOI=",
"action" => "create",
"note" => { "name"=>"note1", "detail"=>"detail" },
"controller" => "notes",
"custom_date" => "03-03-2010"
}
导致此错误的原因是什么?谢谢你的阅读。
答案 0 :(得分:10)
您获得的参数是
{"commit"=>"Create",
"utf8"=>"\342\234\223",
"authenticity_token"=>"RKYZNmRaElg/hT5tlmLcqnstnOapdhiaWmDcjNDtSOI=",
"action"=>"create",
"note"=>
{"name"=>"note1",
"detail"=>"detail"},
"controller"=>"notes",
"custom_date"=>"03-03-2010"}
因此我们可以清楚地说出来
它不是params[:custom_date]
,而是params['custom_date']
<强>更新强>
Date.strptime方法遵循特定模式。例如
str = "01-12-2010" #DD-MM-YYYY
then use
Date.strptime(str,"%d-%m-%Y")
但是如果
str = "2010-12-01" #YYYY-MM-DD
then use
Date.strptime(str,"%Y-%m-%d")
答案 1 :(得分:1)
使用to_date
方法格式化参数[:custom_date]
@note.date = (Date.strptime(params[:custom_date], '%d-%m-%Y')).to_date unless params[:custom_date].blank?
由于
答案 2 :(得分:0)
我无法在ruby 1.9.2或ruby 1.8.7
上重现此错误我怀疑你的param [:custom_date]在你显示的日志输出和Date.strptime调用之间发生了变化。
Rails表示params键,因此可以将它们读为params [:custom_date]