web-dev-qa-db-fra.com

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

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

J'ai un tableau de données constantes dont j'ai besoin disponible sur tous les contrôleurs de mon application.

44
mlambie

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

Utilisez ensuite MyApplication::SUPER_SECRET_TOKEN pour référencer la constante.


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

  1. dans /config/initializers lorsque la constante a la portée des applications
  2. lorsque la constante fait référence à un modèle/contrôleur/assistant spécifique, vous pouvez 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 des constantes d'application 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
64
Simone Carletti

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, cela peut être compliqué. Envisagez de vous approvisionner à partir d'un fichier YAML ou de conserver les constantes dans la base de données.

ÉDITER:

la réponse de weppos est la meilleure réponse.

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

10
guns