2011-03-10 5 views
91

J'ai vu des docs/sites Web montrer que les validateurs personnalisés devraient aller dans un répertoire /lib ou /lib/validators d'un projet. J'ai trouvé (en lisant une réponse à un autre post) qu'ils semblent seulement fonctionner en config/initializers. Est-ce que quelqu'un sait, ou a un pointeur vers la documentation officielle qui montre où les validateurs personnalisés devraient vivre?Où stocker les validateurs Rails 3 personnalisés?

+0

Que diriez-vous de [changer l'indicateur de réponse accepté] (http://stackoverflow.com/questions/5263239/where-should-rails-3-custom-validators-be-stored/6610270#comment16660135_6610270)? – JJD

Répondre

216

Si vous placez vos validateurs personnalisés dans app/validators ils seront automatiquement chargés sans avoir besoin de modifier votre fichier config/application.rb.

+0

Je ne sais pas s'il y a une gem/config que vous devez ajouter pour cela, mais sous les rails 3.2.8 ça ne marche pas. Plus précisément, le simple fait de laisser tomber votre validateur dans app/validators/???. Rb ne fonctionne pas. – Doug

+17

Doug essaie de nommer le fichier du validateur de la même façon que la classe du validateur est nommé mais souligné: MyCoolValidator va à app/validators/my_cool_validator.rb – equivalent8

+7

Cela devrait être la réponse acceptée à mon avis. – DavidJ

4

Voici les official docs concernant les validations personnalisées. AFAIK est une bonne pratique pour les garder dans les modèles pertinents.

+4

Sauf si elles sont applicables à plusieurs modèles, auquel cas vous devriez les garder ailleurs pour rester au sec. –

+0

Ce qui est probablement ce qu'ils sont parce que sinon, il est inutile de créer une classe distincte pour eux. –

+7

@Jakub Oui il y a: Principe de responsabilité unique – mattwynne

6

lib/validators semble de loin le plus propre. Cependant, vous devrez peut-être les charger avant vos modèles, donc probablement à partir d'un initialiseur.

14

Si vous ajoutez ceci à votre fichier /config/application.rb:

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

Ensuite Rails chargera automatiquement validateurs au démarrage (tout comme/config/initializers /), mais vous gardez le nettoyage structure d'avoir vos validateurs dans un endroit agréable et bien nommé.

+9

Bonne idée mais votre code a besoin d'un peu de nettoyage: 'config.autoload_paths + =% W (# {config.root}/lib/validators /)' – aNoble

Questions connexes