I haben die folgende Methode, die Benutzer Geburtstag prüft (in "% d /% m /% Y" -Format) mindestens 18.Rails: Optimierung eines Verfahrens
def person_age
if person_birthdate.present?
now = Time.now.utc.to_date
begin
parsedDate = Date.parse(person_birthdate, '%d/%m/%Y')
diff = now.year - parsedDate.year
diff -= (diff.years.since(parsedDate) > now ? 1 : 0)
if diff < 18
errors.add :person_birthdate, 'You should be at least 18'
end
rescue
errors.add :person_birthdate, 'Date not valid'
end
else
errors.add :person_birthdate, 'Date not valid'
end
end
aber zu viele, wenn die Bedingungen zu sein, Irgendeine Idee, wie man es besser aussehen lässt?
Es scheint, wie Sie den Geburtstag als String in der Datenbank speichern. Warum machst du das? Wenn es eine Datumsspalte wäre, würde Rails das Parsing für Sie übernehmen und Ihre Validierung wäre viel einfacher. – spickermann