2010-11-29 12 views
4

Sur cette ligne de code:Quelle est la cause de cette erreur de date non valide?

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

Je reçois cette erreur:

ArgumentError: invalid date 
/usr/ruby1.9.2/lib/ruby/1.9.1/date.rb:1022 

Voici les paramètres:

{ 
    "commit"    => "Create", 
    "utf8"    => "\342\234\223", 
    "authenticity_token" => "RKYZNmRaElg/hT5tlmLcqnstnOapdhiaWmDcjNDtSOI=", 
    "action"    => "create", 
    "note"    => { "name"=>"note1", "detail"=>"detail" }, 
    "controller"   => "notes", 
    "custom_date"  => "03-03-2010" 
} 

Quelle est la cause de cette erreur? Merci d'avoir lu.

Répondre

10

Les paramètres que vous obtenez est

{"commit"=>"Create", 
"utf8"=>"\342\234\223", 
"authenticity_token"=>"RKYZNmRaElg/hT5tlmLcqnstnOapdhiaWmDcjNDtSOI=", 
"action"=>"create", 
"note"=> 
    {"name"=>"note1", 
    "detail"=>"detail"}, 
"controller"=>"notes", 
"custom_date"=>"03-03-2010"} 

Par conséquent, nous pouvons clairement

son pas params[:custom_date] mais c'est params['custom_date']

MISE À JOUR

méthode Date.strptime suit une instance pattern.For particulier

str = "01-12-2010" #DD-MM-YYYY 
then use 
Date.strptime(str,"%d-%m-%Y") 

mais si

str = "2010-12-01" #YYYY-MM-DD 
then use 
Date.strptime(str,"%Y-%m-%d") 
1

Utilisez la méthode to_date au Format params [: custom_date]

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

Merci

+1

'AJOUT D'to_date' est redondant. 'Date.strptime (...)' renvoie déjà un objet Date. –

0

Je ne suis pas en mesure de reproduire cette erreur sur Ruby 1.9.2 ou rubis 1.8.7

Je suspecte que votre param [: custom_date] change entre la sortie de journal que vous avez montrée et l'appel de Date.strptime.

Rails symbolise les clés params il est donc possible de les lire comme params [:] custom_date