2011-03-10 13 views
91

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

+0

¿Qué le parece [cambiar el indicador de respuesta aceptada] (http://stackoverflow.com/questions/5263239/where-should-rails-3-custom-validators-be-stored/6610270#comment16660135_6610270)? – JJD

Respuesta

216

Si coloca sus validadores personalizados en app/validators se cargarán automáticamente sin necesidad de modificar su archivo config/application.rb.

+0

No sé si hay alguna gema/configuración que necesites agregar para esto, pero debajo de los rieles 3.2.8 esto no funciona. Específicamente, simplemente dejar caer su validador en la aplicación/validadores/???. Rb no funciona. – Doug

+17

Doug trata de nombrar el archivo del validador de la misma manera que se nombra la clase del validador, pero se destaca: MyCoolValidator va a app/validators/my_cool_validator.rb – equivalent8

+7

Esta debería ser la respuesta aceptada en mi opinión. – DavidJ

4

Aquí está el official docs sobre validaciones personalizadas. AFAIK es una buena práctica para mantenerlos en los modelos pertinentes.

+4

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

+0

Que es lo que presumiblemente son porque de lo contrario no tiene sentido crear una clase separada para ellos. –

+7

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

6

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

14

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

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

Entonces rieles se cargará automáticamente sus validadores en el arranque (al igual/config/inicializadores /), pero se mantiene la limpieza estructura de tener sus validadores en un lugar agradable y bien nombrado.

+9

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

Cuestiones relacionadas