Wo sollen benutzerdefinierte Rails 3-Validatoren gespeichert werden?


93

Ich habe gesehen, dass Dokumente / Websites zeigen, dass benutzerdefinierte Validatoren in ein /liboder /lib/validatorsVerzeichnis eines Projekts verschoben werden sollten . Ich habe festgestellt (indem ich eine Antwort auf einen anderen Beitrag gelesen habe), dass sie nur zu funktionieren scheinen config/initializers. Kennt jemand die offizielle Dokumentation oder hat er einen Hinweis darauf, wo benutzerdefinierte Validatoren leben sollten?


Antworten:


220

Wenn Sie Ihre benutzerdefinierten Validatoren einfügen app/validators, werden diese automatisch geladen, ohne dass Sie Ihre config/application.rbDatei ändern müssen .


Ich weiß nicht, ob Sie dafür ein Gem / Config hinzufügen müssen, aber unter Rails 3.2.8 funktioniert dies nicht. Insbesondere funktioniert es nicht, Ihren Validator einfach in app / validators / ???. Rb abzulegen.
— Doug

17
Doug versucht, die Validator-Datei so zu benennen, wie die Validator-Klasse benannt, aber unterstrichen ist: MyCoolValidator geht zu app / validators / my_cool_validator.rb
— äquivalent8

14
@Doug müssen Sie Ihren Server neu starten. Die Autoload-Pfade werden bei der Initialisierung erweitert, sodass neue Unterordner erst dann abgerufen werden, wenn Sie dies tun.
— Timo

Ich möchte auch ActiveModel :: Validations :: HelperMethods monkeypatchen, um einen Helfer für meine neue Validierung hinzuzufügen (z. B. validates_address für AddressValidator). Wenn ich sowohl den Monkeypatch als auch den Validator in app / validators / address_validator.rb einbinde, wird nur das AddressValidator-Objekt geladen, nicht der Monkeypatch. Habt ihr das gleiche Verhalten?
— Jshkol

1
spring stopwar für mich in Rails 5.2 notwendig, sonst wurde es nicht abgeholt.
— Jack Kinsella

15

Wenn Sie dies zu Ihrer Datei /config/application.rb hinzufügen:

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

Dann lädt Rails Ihre Validatoren beim Start automatisch (genau wie / config / initializers /), aber Sie behalten die saubere Struktur bei, Ihre Validatoren an einem schönen, gut benannten Ort zu haben.


9
Gute Idee, aber Ihr Code muss bereinigt werden: config.autoload_paths += %W(#{config.root}/lib/validators/)
— aNoble

6

lib/validatorsscheint bei weitem das sauberste. Möglicherweise müssen Sie sie jedoch vor Ihren Modellen laden, also wahrscheinlich von einem Initialisierer.


4

Hier sind die offiziellen Dokumente zu benutzerdefinierten Validierungen. AFAIK ist eine gute Praxis, um sie in den relevanten Modellen zu halten.


5
Sofern sie nicht für mehrere Modelle gelten, sollten Sie sie an anderer Stelle aufbewahren, um trocken zu bleiben.
— Andrew Marshall

Was sie vermutlich sind, weil es sonst wenig Sinn macht, eine separate Klasse für sie zu erstellen.
— Jakub Hampl

7
@ Jakub Ja, es gibt: Prinzip der
— Einzelverantwortung

2
Der Link zu den offiziellen Dokumenten ist unterbrochen. Hier ist der aktuelle Speicherort dieser Dokumentation. guides.rubyonrails.org/…
— Stijnster
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.