wziąłem odpowiedź @dankohn i zaktualizowany, aby był gotowy do użycia przez I18n. Usunąłem również test blank
, ponieważ nie jest to odpowiedzialnością tego walidatora i można go łatwo włączyć, dodając presence: true
do połączenia sprawdzania poprawności.
Zaktualizowana klasa, teraz nazwany in_future
, co moim zdaniem jest ładniejsza niż not_in_past
class InFutureValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
record.errors.add(attribute, (options[:message] || :in_future)) unless in_future?(value)
end
def in_future?(date)
date.present? && date > Time.zone.today
end
end
Teraz dodać klucz in_future
do pliku lokalizacyjnego.
Dla wszystkich pól pod numerem errors.messages.in_future
, np. w przypadku języka niderlandzkiego:
nl:
errors:
messages:
in_future: 'moet in de toekomst zijn'
Lub w polu pod numerem activerecord.errors.models.MODEL.attributes.FIELD.in_future
, np. dla end_date
w A Vacancy
modelu w języku polskim:
nl:
activerecord:
errors:
models:
vacancy:
attributes:
end_date:
in_future: 'moet in de toekomst zijn'
myślę 'in_future' jest ładniejszy –