Czy istnieje najlepsza praktyka definiowania niestandardowych typów błędów w bibliotece Ruby (gem) lub aplikacji Ruby on Rails? Konkretnie:
- Gdzie strukturalnie przynależą do projektu? Oddzielny plik, wstawiony z odpowiednią definicją modułu / klasy, gdzieś indziej?
- Czy są jakieś konwencje, które tworzą kiedy do kiedy nie tworzyć nowy rodzaj błędu?
Różne biblioteki mają różne sposoby działania i nie zauważyłem żadnych prawdziwych wzorców. Niektóre biblioteki zawsze używają niestandardowych typów błędów, podczas gdy inne w ogóle ich nie używają; niektóre mają wszystkie błędy rozszerzające StandardError, podczas gdy inne mają zagnieżdżone hierarchie; niektóre są po prostu pustymi definicjami klas, inne mają różne sprytne sztuczki.
Aha, i tylko dlatego, że mam ochotę nazywać te „typy błędów”, jest to trochę niejednoznaczne, mam na myśli to:
class AuthenticationError < StandardError; end
class InvalidUsername < AuthenticationError; end
źródło
httparty
: github.com/jnunemaker/httparty/blob/…Exceptions
module?/lib
może nie być miejsce na błędy. Są one bardzo specyficzne dla aplikacji i mam wrażenie, że kod, który wprowadzam,/lib
ma być kodem, który można ponownie wykorzystać w innych aplikacjach.Unable to autoload constant Exceptions, expected /app/lib/exceptions.rb to define it
inną opcją byłaby jedna klasa na wyjątek, jak sądzęMyślę, że aby mieć spójne pliki źródłowe w swoim projekcie, należy zdefiniować błędy w klasie, do której mogą je wrzucić i nigdzie indziej.
Pomocna może być pewna hierarchia - przestrzenie nazw są dobre w utrzymywaniu nadmiarowych ciągów znaków z dala od nazw typów - ale to bardziej kwestia gustu - nie ma potrzeby przesadzania, pod warunkiem, że w aplikacji masz co najmniej jeden niestandardowy typ wyjątku, którego używasz do rozróżnienia między „zamierzonymi” a „przypadkowymi” wyjątkami.
źródło
w railsach możesz stworzyć
app/errors
katalogzrestartuj spring / server i powinien go odebrać
źródło
raise FooError, "Example message..."
alboraise FooError.new("Example message...")
To jest stare pytanie, ale chciałem podzielić się tym, jak radzę sobie z niestandardowymi błędami w Railsach, włączając w to dołączanie komunikatów o błędach, testowanie i jak sobie z tym radzić
ActiveRecord
modelach.Tworzenie błędu niestandardowego
Testowanie (minitest)
Z ActiveRecord
Myślę, że warto zauważyć, że podczas pracy z
ActiveRecord
modelem popularnym wzorcem jest dodanie błędu do modelu, jak opisano poniżej, aby Twoje walidacje nie powiodły się:Po uruchomieniu walidacji ta metoda będzie połączona z ActiveRecord
ActiveRecord::RecordInvalid
klasę błędów i spowoduje niepowodzenie walidacji.Mam nadzieję że to pomoże!
źródło
Aby upewnić się, że automatyczne ładowanie działa zgodnie z oczekiwaniami w Railsach 4.1.10 dla wielu niestandardowych klas błędów, będziesz chciał określić oddzielne pliki dla każdego. Powinno to działać w fazie rozwoju z dynamicznym ponownym ładowaniem.
Oto jak konfiguruję błędy w ostatnim projekcie:
W
lib/app_name/error/base.rb
iw kolejnych błędach niestandardowych, takich jak w
lib/app_name/error/bad_stuff.rb
Powinieneś wtedy móc wywołać swoje błędy za pośrednictwem:
źródło
lib/app_name/error.rb
uninitialized constant MyController::AppName
. Wzywam podbicie na moim kontrolerze