2016-07-21 6 views
0

Ich habe diese validate auf meinem Modell:Validieren Es ist in der Vergangenheit nicht Fehler ohne Auslösen, wenn eine zweite Vergangenheit hat, nachdem Sie die Zeit ausgewählt

def time_in_future 
    if start_at? 
    errors[:base] << 'The Start Date can not be in the past.' if start_at < Time.zone.now 
    end 
end 

Aber jedes Mal, wenn ich versuche ich, den Fehler zu speichern, Ich frage in meiner Validierung, die Sinn macht. Ich nehme an, weil die Zeit auf die Sekunde herunter ist, egal wann ich speichere, die Zeit, die automatisch auf meinen Datetimepicker geladen wird, ist eine Zeit in der Vergangenheit, weil es mehr als eine Sekunde dauert, um die Zeit auszuwählen, dann auf "Speichern" klicken.

Ich habe an ein paar Lösungen gedacht, von denen die einfachste wäre, die Fehlermeldung lesen zu lassen "The Start Date must be a time in the Future." Einfach genug. Oder, vor dem Speichern, wird die start_at-Zeit automatisch in der Zukunft gespeichert, ich dachte 15 Minuten.

Ich nehme an, dies muss eine Situation sein, die Menschen regelmäßig begegnen. Gibt es einen besseren oder gebräuchlicheren Weg, diese Situation zu lösen?

Ich schätze Ihre Eingabe.

Edit:

Meine aktualisiert Methode nach Eingabe unter „Gnadenfrist“

def time_in_future 
    if start_at? do 
     errors[:base] << 'The Start Date must be in the future. Seconds count!' if start_at < DateTime.current + 15.minutes 
    end 
    end 
end 
+1

Was ist die Methode "start_at?" ? Es prüft "start_at?" Zuerst und da unten suche ich nach einem "start_at" (Attribut, nehme ich an) –

+1

Ich hatte gerade einen riesigen 'Time' Kopfschmerz, und was ich gelernt habe, ist' DateTime.current' zu verwenden, wann immer du kannst. Es hat die Zeitzone vorhanden. Du könntest wahrscheinlich einfach '(start_at + 1.minute)

+0

@RonanLopes start_at? überprüft nur das Vorhandensein eines Datums, bevor es prüft, ob das Datum in der Zukunft liegt. Ich bin immer noch ziemlich neu in der Entwicklung, gibt es einen besseren Weg dies zu schreiben? – Lenocam

Antwort

1

Ein weiterer möglicher Vorschlag, die ich tatsächlich umgesetzt haben auf große Produktionsstandorte ist eine haben, Für uns war diese Kulanzzeit 2 Stunden, könnte aber nur wenige Sekunden betragen - das hängt von Ihrem genauen Bedarf ab.

So sah mein Code so etwas wie:

def time_in_future 
    if start_at? 
    errors[:base] << 'The Start Date can not be in the past.' if start_at < Time.current + 2.hours 
    end 
end 

Der Vorteil dieses Modells ist, dass die 2.hours pro Umgebung eingestellt werden könnte, die Tests machen würde und Fehlerbehebung andere Aspekte Ihres Modells, das start_at viel einfacher beinhalten .

Verwandte Themen