2012-04-13 4 views
4

Was ist die eleganteste Art, ein params[:date] Feld in ein Date Objekt zu konvertieren?Der Zen-Weg von Params [: Datum] zu Datum konvertieren?

"date"=>{"day"=>"13", "year"=>"2012", "month"=>"4"} 

Derzeit habe ich den folgenden Code in der controller:

@date = Date.current 
if params[:date] 
    yy = mm = dd = 0 
    yy = params[:date][:year].to_i if params[:date][:year] 
    mm = params[:date][:month].to_i if params[:date][:month] 
    dd = params[:date][:day].to_i if params[:date][:day] 
    @date = Date::civil(yy, mm, dd) if Date::valid_date?(yy, mm, dd) 
end 

und innerhalb der view ‚s form_tag:

<%= select_date(@date, :order => [:year, :month, :day], :prefix => 'date') %> 
+0

Ich würde lieber eine Zeichenfolge senden und Parsing mit einer kürzeren Leitung zu delegieren, ich nehme an, es kann möglich sein, aber weiß nicht wie. – juanpastas

Antwort

7

Es wird das gültige Datum oder Uhrzeit-Objekt zurück. Versuchen Sie:

@date = Date.parse("#{params[:date]['day']}-#{params[:date]['month']}-#{params[:date]['year']}") if params[:date] 
OR 
@date = Time.parse("#{params[:date]['day']}-#{params[:date]['month']}-#{params[:date]['year']}") if params[:date] 

@date ||= Date.current