¿Dónde se deben almacenar los validadores personalizados de Rails 3?


93

He visto documentos / sitios web que muestran que los validadores personalizados deben ir en un directorio /libo /lib/validatorsde un proyecto. Descubrí (leyendo una respuesta a otra publicación) que solo parecen funcionar config/initializers. ¿Alguien sabe o tiene un puntero a la documentación oficial que muestra dónde deberían vivir los validadores personalizados?


Respuestas:


220

Si coloca sus validadores personalizados, app/validatorsse cargarán automáticamente sin necesidad de modificar su config/application.rbarchivo.


No sé si hay alguna gema / configuración que deba agregar para esto, pero bajo los rieles 3.2.8 esto no funciona. Específicamente, simplemente colocar su validador en app / validators / ???. Rb no funciona.
Doug

17
Doug intenta nombrar el archivo del validador de la misma manera que se nombra la clase del validador pero se subraya: MyCoolValidator va a app / validators / my_cool_validator.rb
equivalente 8

14
@Doug necesitas reiniciar tu servidor. Las rutas de carga automática se expanden en la inicialización, por lo que no se recogerán nuevas subcarpetas hasta que lo haga.
Timo

También me gusta monopatch ActiveModel :: Validations :: HelperMethods para agregar un ayudante para mi nueva validación (por ejemplo, validates_address para AddressValidator). Cuando incluyo tanto el monkeypatch como el Validator en app / validators / address_validator.rb, solo se carga el objeto AddressValidator, no el monkeypatch. ¿Están experimentando el mismo comportamiento?
jshkol

1
spring stopera necesario para mí en Rails 5.2, de lo contrario, no se recogió.
Jack Kinsella

15

Si agrega esto a su archivo /config/application.rb:

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

Luego, Rails cargará automáticamente sus validadores al iniciar (como / config / initializers /), pero usted mantiene la estructura limpia de tener sus validadores en un lugar agradable y bien nombrado.


9
Buena idea, pero su código necesita un poco de limpieza: config.autoload_paths += %W(#{config.root}/lib/validators/)
aNoble

6

lib/validatorsparece de lejos el más limpio. Sin embargo, es posible que deba cargarlos antes que sus modelos, por lo que probablemente desde un inicializador.


4

Aquí están los documentos oficiales sobre validaciones personalizadas. AFAIK es una buena práctica mantenerlos en los modelos relevantes.


5
A menos que sean aplicables a varios modelos, en cuyo caso debe guardarlos en otro lugar para mantenerse SECO.
Andrew Marshall

Que es lo que presumiblemente son porque, de lo contrario, no tiene mucho sentido crear una clase separada para ellos.
Jakub Hampl

7
@Jakub Sí, existe: Principio de responsabilidad única
mattwynne

2
El enlace a los documentos oficiales está roto. Aquí está la ubicación actual de esa documentación; guides.rubyonrails.org/…
Stijnster
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.