¿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.