2009-07-10 3 views

Répondre

10

Vous pouvez les placer dans config/environment.rb:

Rails::Initializer.run do |config| 
    ... 
    SITE_NAME = 'example.com' 
end 

Si vous avez de grandes quantités de constantes globales, ce qui peut être salissant. Envisagez de vous approvisionner à partir d'un fichier YAML ou de conserver les constantes dans la base de données.

EDIT: La réponse de

weppos est la meilleure réponse.

Gardez vos constantes dans un fichier dans config/initializers/*. Rb

63

Rails> = 3, l'application elle-même est un module (vivant dans config/application.rb). Vous pouvez les stocker dans le module d'application

module MyApplication 
    SUPER_SECRET_TOKEN = "123456" 
end 

Utilisez ensuite MyApplication::SUPER_SECRET_TOKEN pour faire référence à la constante.


Rails> = 2.1 & & < 3 vous devez les placer

  1. dans /config/initializers lorsque la constante a les applications portée
  2. lorsque la constante se réfère à un modèle/contrôleur/aide spécifique que vous peut l'étendre dans la classe/le module lui-même

Avant la prise en charge de Rails 2.1 et initializers, les programmeurs étaient utilisés pour placer les constantes d'application dans environment.rb.

est ici quelques exemples

# config/initializers/constants.rb 
SUPER_SECRET_TOKEN = "123456" 

# helpers/application_helper.rb 
module ApplicationHelper 
    THUMBNAIL_SIZE= "100x20" 

    def thumbnail_tag(source, options = {}) 
    image_tag(source, options.merge(:size => THUMBNAIL_SIZE) 
    end 

end 
+2

étrange, mais ne fonctionne pas. Bien que constants.rb soit exécuté au lancement, je ne peux pas accéder à SUPER_SECRET_TOKEN dans les contrôleurs ou les vues. –

+6

Maintenant c'est drôle. Qui saura que la «surpuissance» de ces constantes est imposée dans les rails? –

+5

Remarque: n'oubliez pas de redémarrer votre serveur après avoir créé une nouvelle constante. Sinon, il ne s'affichera pas correctement! –