Czy szyny dokonują walidacji datetime? Znalazłem wtyczkę: http://github.com/adzap/validates_timeliness/tree/master, , ale wygląda na to, że powinno wyjść z pudełka.szyny zbudowane w walidacji datetime
Odpowiedz
Nie ma wbudowaną ActiveRecord walidator dla DateTimes, ale łatwo można dodać tego rodzaju zdolności do modelu ActiveRecord, bez użycia wtyczki, ze coś takiego:
class Thing < ActiveRecord::Base
validate :happened_at_is_valid_datetime
def happened_at_is_valid_datetime
errors.add(:happened_at, 'must be a valid datetime') if ((DateTime.parse(happened_at) rescue ArgumentError) == ArgumentError)
end
end
Doskonale, dzięki Gabe. – Daniel
Cieszę się, że pomogło to. To nie jest najbardziej chwalebny kod, ale działa. –
Dzięki, to jest świetne. Próbowałem 'validates_timeliness' ale miałem problemy z używaniem pobierających i ustawiających. To działało idealnie. –
To całkiem niezbędne do walidacji Daktyle. Za pomocą domyślnych pomocników formularzy Railsowych można wybrać daty takie jak 31 września. Odpowiedź
Sprawdzanie poprawności danych wprowadzanych przez użytkownika to dobry początek, ale kontekst pytania sugeruje, że PO pytał o zatwierdzenia modelu Rails. –
Gabe nie działa dla mnie, więc oto co zrobiłem, aby potwierdzić moje terminach:
class MyModel < ActiveRecord::Base
validate :mydate_is_date?
private
def mydate_is_date?
if !mydate.is_a?(Date)
errors.add(:mydate, 'must be a valid date')
end
end
end
właśnie chce potwierdzić, że data jest w rzeczywistości data, a nie ciągiem znaków, charakter, int, float, etc ...
Bardziej skomplikowane walidacja datę można znaleźć tutaj: https://github.com/codegram/date_validator
Klejnot jest najłatwiejszym rozwiązaniem, zajęło mi trzy minuty do realizacji. Nie warto napisać żadnego kodu. –
@MichaelSchmitz - Warto napisać kod, ponieważ kod jest oczywisty - nowi ludzie, którzy patrzą na kod, mogą nie wiedzieć o istnieniu tego klejnotu i dodają dodatkowe obciążenie dla tego, co jest prostym zadaniem. – Toby
@Toby - dzięki za wskaźnik, masz rację. Jestem teraz jedynym programistą, zgaduję, że byłem po prostu szczęśliwy, że zadziałało. –
polecam gem date_validator
. Zobacz https://rubygems.org/gems/date_validator. Jest dobrze utrzymany, a jego API jest proste i kompaktowe.
Można utworzyć niestandardowe walidatora datetime przez siebie
1) Utwórz folder o nazwie weryfikatorów w wewnątrz aplikacji katalogu
2) Utwórz datetime_validator.rb pliku. o następującej treści wewnątrz aplikacji/Walidatory katalog
class DatetimeValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
if ((DateTime.parse(value) rescue ArgumentError) == ArgumentError)
record.errors[attribute] << (options[:message] || "must be a valid datetime")
end
end
end
3) Zastosuj ten walidację modelu
class YourModel < ActiveRecord::Base
validates :happend_at, datetime: true
end
4) Dodaj poniższy wiersz w environment.rb
config.autoload_paths += %W["#{config.root}/app/validators/"]
5) Restart Twoja aplikacja szynowa
Uwaga: Powyższa metoda testowana w szynach 4
Ostatnie wersje Railsów będą miały wartości type cast przed sprawdzeniem poprawności, więc nieprawidłowe wartości zostaną przekazane jako nil
s do niestandardowych weryfikatorów. Robię tak:
# app/validators/date_time_validator.rb
class DateTimeValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
if record.public_send("#{attribute}_before_type_cast").present? && value.blank?
record.errors.add(attribute, :invalid)
end
end
end
# app/models/something.rb
class Something < ActiveRecord::Base
validates :sold_at, date_time: true
end
# spec/models/something_spec.rb (using factory_girl and RSpec)
describe Something do
subject { build(:something) }
it 'should validate that :sold_at is datetimey' do
is_expected.not_to allow_value(0, '0', 'lorem').for(:sold_at).with_message(:invalid)
is_expected.to allow_value(Time.current.iso8601).for(:sold_at)
end
end
- 1. Szyny: Wiele, jeśli warunki walidacji
- 2. Bootstrap 3 Datepicker i DateTime błąd walidacji
- 3. walidacji krzyżowej w Weka
- 4. szyny 3: client_side_validations rzucanie alertu działa unikatowy walidacji
- 5. Szyny 3 Porównanie datetime w/Data w zapytaniu ActiveRecord
- 6. Zaawansowany niestandardowych walidacji zasady walidacji
- 7. laravel walidacji 4 vs modelu walidacji Controller
- 8. Jak dodać własną wiadomość do walidacji wzór w walidacji ko
- 9. Szyny: przekonwertuj UTC DateTime na inną strefę czasową
- 10. Samoobsługowe interfejsy API zbudowane na Django-Tastypie
- 11. Pozytywne walidacji numer w jQuery
- 12. Warstwa walidacji w wzorcu MVC
- 13. błędy walidacji w trybie AJAX
- 14. Wiele walidacji formatu w Rails
- 15. Dostępność w walidacji formularzy javascript
- 16. Symfony2: Jak zmodyfikować wartość formularz przed walidacji
- 17. Jakie aplikacje w Google Play są zbudowane przy użyciu Qt?
- 18. "binarne nie zostało zbudowane z informacjami debugowania" w aplikacji mfc?
- 19. Web API walidacji parametr pojedynczy łańcuch za pomocą walidacji
- 20. email walidacji pola poczty
- 21. Strategie walidacji z AngularJS
- 22. MySQL walidacji Wyślij Records
- 23. Debugowanie biegle zasady walidacji
- 24. JavaScript regex walidacji URL
- 25. dziedziczenie walidacji symfony2
- 26. walidacji na przycisk
- 27. walidacji całkowite dodatnie
- 28. javascript regex (walidacji nazwa_użytkownika)
- 29. Konwersja datetime ciąg datetime w numpy (Python)
- 30. Format szyny Data zerowa
kocham 'validates_timeliness'. Może być zainstalowany jako klejnot. Było tak samo szybkie, jak instalacja, kopiowanie i wklejanie wybranej odpowiedzi. –