将全局变量放在Rails 3中的位置

时间:2010-08-30 08:04:07

标签: ruby-on-rails ruby-on-rails-3 global-variables

我曾经使用我的Rails 2.3.8应用程序将Global变量放在environment.rb中,例如:

MAX_ALLOWD_ITEMS = 6

它似乎在Rails 3中不起作用。我尝试将它放在application.rb中并​​且没有帮助。

你有什么建议?

5 个答案:

答案 0 :(得分:47)

如果您已尝试按照Ryan的建议重新启动服务器,请尝试将其放入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

答案 1 :(得分:7)

我通常使用application_helper.rb 这就是它的样子:

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

然后我可以将my_global_variable放在任何地方作为函数。

答案 2 :(得分:2)

如果你真的在 config / environment.rb 中定义它,我可以解决问题的唯一方法是使用rails server运行服务器,然后将变量放入 config / environment.rb ,在某个地方的视图或控制器中引用它,然后尝试加载我的应用程序的特定部分。

如果我停止服务器并再次启动它并再次尝试访问该视图或控制器,那么它可以工作。我估计你刚刚没有重启你的服务器。

答案 3 :(得分:1)

我通常使用所有全局网站设置创建内部config / initializers / yaml(yml)文件。 记得每次更改任何内容时都要重新启动服务器。

答案 4 :(得分:0)

我不知道向environment.rb添加变量的解决方案是否实际上可以在Rails3中工作 - 具体来说,如果你没有在模块定义中定义变量,如下所示:

module MyConfig
  Max_ints = 5
end

如果您只是将其作为一个简单的定义包含在内,那么您将无法使用Max_ints。或者至少那是我在实验时发现的事情。我还认为使用初始化器/文件夹的建议可能是一个更好的解决方案,易于使用。见Permanent variable in Rails