34 votes

Où/Comment coder les constantes dans une application Rails 3

Duplicata possible :
Ruby on Rails : Où définir les constantes globales ?

Je suis intéressé à faire cela de la "manière Rails" sur une nouvelle application. J'aimerais également faire référence aux constantes dans une sorte de contexte pour rendre le code plus lisible. J'ai une application où un utilisateur peut demander l'accès à l'ensemble des données d'un autre utilisateur. Cette AccessRequest peut avoir l'un des statuts suivants :

Examen Refusé Approuvé

Ces valeurs pourraient être utilisées à l'avenir dans des fonctions de rapport. Je souhaite donc en faire des constantes afin d'éviter tout problème d'orthographe ou de capitalisation. Je pensais simplement les placer dans un fichier constants.rb dans le répertoire config/initializers.

Je voudrais les désigner sous le nom de AccessRequest::REVIEW. Puisque j'ai déjà un modèle appelé AccessRequest, cela a-t-il un sens de les placer là ? Ou de les intégrer dans une classe dans un fichier constants.rb dans le répertoire config/initializers ? Quelle est la méthode Rails ?

43voto

shingara Points 26980

Vous n'avez pas besoin d'utiliser les constantes dans Rails 3, il est préférable d'utiliser le singleton Rails::Application.

Dans votre application.rb vous pouvez définir votre constante comme :

module Yourapp
  class Application < Rails::Application

    config.access_request.review = 'xxx'
  end
end

Ensuite, dans votre code, vous pouvez appeler

Yourapp::Application.config.access_request.review

Après, si vous changez la valeur dans chaque environnement, il suffit de définir le config.xx dans votre environnement. config/environments/production.rb ou autre environnement.

28voto

Sasha Points 344

Réponse tardive, mais je la poste car cette réponse apparaît toujours dans les résultats de recherche. Il est logique de placer la constante dans le modèle, car elle s'y rapporte directement. L'utilisation de la configuration de l'application Rails pour stocker les constantes est incorrecte.

Conformément au commentaire figurant dans application.rb :

# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded

Ceci est toujours valable à partir de Rails 3.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X