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
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) –
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)
@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