webentwicklung-frage-antwort-db.com.de

Wo werden globale Variablen in Rails eingefügt? 3

Ich habe in meiner Anwendung "Rails 2.3.8" globale Variablen in environment.rb eingefügt, wie zum Beispiel:

MAX_ALLOWD_ITEMS = 6

Es scheint nicht in Rails 3 zu funktionieren. Ich habe versucht, es in application.rb zu setzen, und das hat nicht geholfen.

Was schlagen Sie vor?

24
Tam

Wenn Sie bereits versucht haben, Ihren Server neu zu starten, wie von Ryan vorgeschlagen, versuchen Sie, ihn wie folgt in Ihren application.rb einzufügen:

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

Dann können Sie es mit dem Namespace in Ihren Controllern, Ansichten oder wo auch immer aufrufen.

MyAppName::Application::YOUR_GLOBAL_VAR

Eine andere Alternative wäre etwas wie settingslogic . Mit der settingslogic erstellen Sie einfach eine Yml-Konfigurationsdatei und ein Modell (Settings.rb), das auf die Konfigurationsdatei verweist. Dann können Sie von überall aus auf diese Einstellungen in Ihrer Rails-App zugreifen:

Settings.my_setting
47
johnmcaliley

Ich gehe normalerweise mit application_helper.rb So sieht es aus:

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

Dann kann ich my_global_variable überall als Funktion einfügen.

7
bhakku

Wenn Sie es wirklich in config/environment.rb definieren, wie Sie sagen, ist die einzige Möglichkeit, Ihr Problem zu duplizieren, das Ausführen eines Servers mit Rails server, then Einfügen der Variablen in config/environment.rb , referenziert es irgendwo in einer Ansicht oder einem Controller und versucht dann, diesen bestimmten Teil meiner Anwendung zu laden.

Wenn ich den Server stoppe und erneut starte und erneut auf diese Ansicht oder den Controller zugreifen möchte, funktioniert es. Ich glaube, Sie haben Ihren Server gerade nicht neu gestartet.

2
Ryan Bigg

Normalerweise erstelle ich in config/initializers/eine yaml-Datei (yml) mit allen globalen Site-Einstellungen. Denken Sie daran, den Server bei jeder Änderung neu zu starten.

1
bmac

Ich weiß nicht, ob die Lösung des Hinzufügens von Variablen zu environment.rb tatsächlich in Rails3 funktionieren würde - um genau zu sein, wenn Sie die Variable nicht wie folgt in einer Moduldefinition definiert haben:

module MyConfig
  Max_ints = 5
end

sie können Max_ints nicht einfach verwenden, wenn Sie es nur als bloße Definition verwenden. Oder zumindest war es das, was ich geschah, als ich damit experimentierte. Ich denke auch, dass der Vorschlag, den Initialisierer/Ordner zu verwenden, möglicherweise eine bessere Lösung in Bezug auf die Benutzerfreundlichkeit darstellt. Siehe Permanente Variable in Rails

0
sameers