web-dev-qa-db-fra.com

Où mettre les variables globales dans Rails 3

J'avais l'habitude de mettre des variables globales dans environment.rb avec mon application Rails 2.3.8 telles que:

MAX_ALLOWD_ITEMS = 6

Cela ne semble pas fonctionner dans Rails 3. J'ai essayé de le mettre dans application.rb et cela n'a pas aidé.

Que suggérez-vous?

24
Tam

Si vous avez déjà essayé de redémarrer votre serveur comme suggéré par Ryan, essayez de le mettre dans votre application.rb comme ceci:

module MyAppName
  class Application < Rails::Application
    YOUR_GLOBAL_VAR  = "test"
  end
end

Ensuite, vous pouvez l'appeler avec l'espace de noms dans vos contrôleurs, vues ou ailleurs.

MyAppName::Application::YOUR_GLOBAL_VAR

Une autre alternative consisterait à utiliser quelque chose comme settingslogic . Avec settingslogic, vous créez simplement un fichier de configuration yml et un modèle (Settings.rb) qui pointe vers le fichier de configuration. Ensuite, vous pouvez accéder à ces paramètres n'importe où dans votre application Rails avec:

Settings.my_setting
47
johnmcaliley

Je vais généralement avec application_helper.rb Voici à quoi ça ressemble:

module ApplicationHelper
  def my_global_variable 
    my_global_variable = "Helloworld!"      
  end
end

Ensuite, je peux mettre my_global_variable n'importe où en tant que fonction.

7
bhakku

Si vous le définissez vraiment dans config/environment.rb comme vous le dites, le seul moyen de dupliquer votre problème consiste à exécuter un serveur à l'aide de Rails server, then en mettant la variable dans config /environment.rb, en le référençant quelque part dans une vue ou un contrôleur, puis en essayant de charger cette partie spécifique de mon application.

Si j'arrête le serveur et le redémarre encore et encore, j'essaie d'accéder à cette vue ou à ce contrôleur, alors cela fonctionne. Je pense que vous n'avez tout simplement pas redémarré votre serveur.

2
Ryan Bigg

Je crée normalement dans config/initializers/un fichier yaml (yml) avec tous les paramètres de site globaux. N'oubliez pas de redémarrer le serveur chaque fois que vous modifiez quelque chose.

1
bmac

Je ne sais pas si la solution consistant à ajouter des variables à environment.rb fonctionnerait réellement dans Rails3 - pour être spécifique, si vous n'avez pas défini la variable dans une définition de module comme ceci:

module MyConfig
  Max_ints = 5
end

vous ne pourrez pas simplement utiliser Max_ints, si vous l'incluez simplement en tant que définition simple. Ou du moins c'est ce que j'ai trouvé arrivé lorsque j'ai expérimenté cela. Je pense aussi que la suggestion d'utiliser le dossier initializers/est probablement une meilleure solution en termes de facilité d'utilisation. Voir Variable permanente en Rails

0
sameers