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?

Daniel D.
źródło

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.

gbc
źródło
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.

gunit888
źródło
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.

Jakub Hampl
źródło
4

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

Shreyas
źródło
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