Gdzie powinny być przechowywane niestandardowe walidatory Rails 3?


94

Widziałem dokumenty / strony internetowe pokazujące, że niestandardowe walidatory powinny znajdować się w katalogu /liblub /lib/validatorsprojektu. Odkryłem (czytając odpowiedź na inny post), że wydają się tylko działać config/initializers. Czy ktoś wie lub ma wskaźnik do oficjalnej dokumentacji, która pokazuje, gdzie powinny znajdować się niestandardowe walidatory?


Odpowiedzi:


221

Jeśli umieścisz w nim własne walidatory app/validators, zostaną one automatycznie załadowane bez konieczności modyfikowania config/application.rbpliku.


Nie wiem, czy jest jakiś gem / config, który trzeba by dodać, ale pod szynami 3.2.8 to nie działa. Mówiąc dokładniej, po prostu upuszczenie walidatora do app / validators / ???. Rb nie działa.
Doug

17
Doug spróbuj nazwać plik walidatora w ten sam sposób, w jaki nosi nazwę klasy walidatora, ale jest podkreślony: MyCoolValidator przechodzi do app / validators / my_cool_validator.rb
odpowiednik

14
@Doug, musisz zrestartować serwer. Ścieżki automatycznego ładowania są rozszerzane podczas inicjalizacji, więc nowe podfoldery nie będą pobierane, dopóki tego nie zrobisz.
Timo

Lubię też monkeypatch ActiveModel :: Validations :: HelperMethods, aby dodać pomocnika do mojej nowej walidacji (np. Validates_address dla AddressValidator). Kiedy dołączam zarówno monkeypatch, jak i Validator w app / validators / address_validator.rb, ładowany jest tylko obiekt AddressValidator, a nie monkeypatch. Czy macie takie samo zachowanie?
jshkol

1
spring stopbyło mi potrzebne w Railsach 5.2, inaczej nie zostało odebrane.
Jack Kinsella

15

Jeśli dodasz to do swojego pliku /config/application.rb:

config.autoload_paths += %W["#{config.root}/lib/validators/"]

Wtedy Railsy automatycznie załadują twoje walidatory przy starcie (tak jak / config / initializers /), ale zachowujesz przejrzystą strukturę posiadania walidatorów w jednym ładnym, dobrze nazwanym miejscu.


9
Dobry pomysł, ale twój kod wymaga config.autoload_paths += %W(#{config.root}/lib/validators/)
uporządkowania

6

lib/validatorswydaje się zdecydowanie najczystszy. Jednak może być konieczne załadowanie ich przed modelami, więc prawdopodobnie z inicjatora.


4

Oto oficjalne dokumenty dotyczące niestandardowych weryfikacji. AFAIK to dobra praktyka, aby trzymać je w odpowiednich modelach.


5
Chyba że mają zastosowanie do wielu modeli, w takim przypadku należy przechowywać je w innym miejscu, aby pozostały SUCHE.
Andrew Marshall,

Prawdopodobnie tym właśnie są, ponieważ w przeciwnym razie nie ma sensu tworzyć dla nich osobnej klasy.
Jakub Hampl

7
@Jakub Tak, jest: Zasada pojedynczej odpowiedzialności
mattwynne

2
Link do oficjalnych dokumentów jest uszkodzony. Oto aktualna lokalizacja tej dokumentacji; guide.rubyonrails.org/…
Stijnster
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.