2010-08-30 51 views
24

我習慣把在environment.rb中的全局變量與我的Rails 2.3.8應用程序,如:如果把全局變量中的Rails 3

MAX_ALLOWD_ITEMS = 6 

這似乎並不在Rails的3.我的工作試圖把它放在application.rb中,並沒有幫助。

你有什麼建議?

+0

你在問什麼不是變量,而是一個常量,意思是說:它不能在應用程序中設置。我在這裏被搜索引擎誤導,因爲這裏使用了錯誤的術語。 – Paul 2014-05-27 12:02:12

回答

46

如果你已經嘗試重新啓動服務器作爲瑞安的建議,嘗試把它在你的application.rb這樣的:

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

然後你就可以在你的控制器,視圖或任何與命名空間稱之爲..

MyAppName::Application::YOUR_GLOBAL_VAR 

另一種方法是使用諸如settingslogic之類的東西。使用settingslogic,您只需創建一個yml配置文件和一個指向配置文件的模型(Settings.rb)。然後你就可以在任何地方訪問這些設置在你的Rails應用程序有:

Settings.my_setting 
+3

我創建了一個受settingslogic啓發的插件,但它並不要求您爲設置創建一個類。您只需包含yml文件,並在服務器啓動時動態創建類。這裏是回購:https:// github。com/cowboycoded/yettings – johnmcaliley 2011-04-07 19:34:03

+2

它不是可變的,而是一個常量,意味着:它不能從應用程序內設置。我在這裏被搜索引擎誤導,因爲這裏使用了錯誤的術語。 – Paul 2014-05-27 12:02:44

+0

這適用於導軌4? – 2014-07-20 18:55:26

2

如果你是真正的在到config/environment.rb像你說的,我可以複製你的問題的唯一方法定義它是跑起來使用rails server然後在變量把一個服務器配置/ environment.rb,引用它在一個視圖或控制器的某個地方,然後試圖加載我的應用程序的特定部分。

如果我停止服務器並一次又一次地啓動它,嘗試訪問該視圖或控制器,然後它就可以工作。我認爲你只是沒有重新啓動你的服務器。

0

我不知道,如果添加變量的environment.rb的解決方案將在Rails3中實際上工作 - 具體而言,如果你的避風港」 T標準變量模塊定義裏面,像這樣:

module MyConfig 
    Max_ints = 5 
end 

,你將不能夠只使用Max_ints,如果你只是把它作爲一個裸露的定義。或者至少這是我在實驗中發現的事情。我也認爲使用初始化程序/文件夾的建議可能是一個更好的解決方案,就易用性而言。請參閱Permanent variable in Rails

1

我通常在所有全局站點設置中創建內部config/initializers/yaml(yml)文件。 記得在每次更改任何內容時重新啓動服務器。

7

我通常application_helper.rb 去這是什麼樣子:

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

然後我可以把my_global_variable作爲函數的任何位置。