44 votes

Quel est le meilleur endroit pour définir une constante dans une application Ruby on Rails ?

Dans une application Ruby on Rails, quel est le meilleur endroit pour définir une constante ?

Je dispose d'un tableau de données constantes qui doivent être disponibles dans tous les contrôleurs de mon application.

64voto

Simone Carletti Points 77653

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

module MyApplication
  SUPER_SECRET_TOKEN = "123456"
end

Ensuite, utilisez MyApplication::SUPER_SECRET_TOKEN pour référencer la constante.


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

  1. sur /config/initializers lorsque la constante a le champ d'application
  2. lorsque la constante fait référence à un modèle/contrôleur/aide spécifique, vous pouvez l'étendre à la classe/module elle-même.

Avant Rails 2.1 et initializers les programmeurs avaient l'habitude de placer les constantes des applications dans environment.rb.

Voici 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

10voto

guns Points 3881

Vous pouvez les placer dans config/environment.rb :

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

Si vous avez une grande quantité de constantes globales, cela peut être désordonné. Envisagez de vous approvisionner à partir d'un fichier YAML ou de conserver les constantes dans la base de données.

EDITAR:

La réponse de Weppos est la meilleure.

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

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