Что является причиной этой ошибки даты? - PullRequest
4 голосов
/ 29 ноября 2010

В этой строке кода:

@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"
}

Что вызывает эту ошибку? Спасибо за чтение.

Ответы [ 3 ]

10 голосов
/ 29 ноября 2010

Параметры, которые вы получаете:

{"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']

UPDATE

Метод 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 голос
/ 29 ноября 2010

Используйте to_date метод для форматирования параметров [: custom_date]

@note.date = (Date.strptime(params[:custom_date], '%d-%m-%Y')).to_date unless params[:custom_date].blank?   

Спасибо

0 голосов
/ 29 ноября 2010

Я не могу воспроизвести эту ошибку на ruby ​​1.9.2 или ruby ​​1.8.7

Я подозреваю, что ваш параметр [: custom_date] изменяется между выводом журнала, который вы показали, и вызовом Date.strptime.

Rails символизирует ключи params, поэтому их можно читать как params [: custom_date]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...