2016-04-29 12 views
3

Ich habe eine Datetime-Picker, der das Check-in sendet & Checkout-Daten mit Suchfeld. Dann sieht die URL aus;Rails Datum überprüfen, ob Parsable

http://localhost:3000/locations/listings?utf8=%E2%9C%93&search=london&start_date=12%2F04%2F16&end_date=20%2F04%2F16 

und ich nehme die params-Hash und analysieren Sie die Zeichenfolge,

start_date = Date.parse(params[:start_date]) 
end_date = Date.parse(params[:end_date]) 

zunächst einmal, ich habe if (start_date.present? && end_date.present?) zu überprüfen und das funktioniert gut.

Aber wenn der Benutzer manuell etwas anderes als das Datum zu URL wie z.

http://localhost:3000/locations/listings?utf8=%E2%9C%93&search=london&start_date=londoneye6&end_date=20%2F04%2F16 

Dann bekomme ich natürlich einen Fehler;

invalid date 

Wie soll ich kontrollieren, ob die Zeichenfolge auf Controller-Aktion parsable ist. Ich sollte auch london-eye, london/eye Strings werden überprüft, darunter - /

Danke

+2

Validate Zeit mit Date.parse, und nur Trap 'ArgumentError' Ausnahme auf Parse Rückkehr' nil' aus –

+0

@ МалъСкрылевъ danke. Kannst du genauer sagen, wie es geht? –

+0

siehe meine Antwort –

Antwort

4

Sie müssen versuchen, die Zeichenfolge Parsen und Rettungs ArgumentError

begin 
    myDate = Date.parse("31-01-2016") 
rescue ArgumentError 
    # handle invalid date 
end 

eine Zeile (bitte beachten Sie, dass diese rettet alle Fehler)

myDate = Date.parse("31-01-2016") rescue nil 
1

Sie können Zeit validieren h Date.parse, und nur Trap ArgumentError Ausnahme auf Parse Rückkehr nil out:

Controller:

def param_date date 
    Date.parse(date) 
rescue ArgumentError 
    nil 
end 

start_date = param_date(params[:start_date]) 
end_date = param_date(params[:end_date]) 
Verwandte Themen