ruby-on-rails - 如何在 Ruby on Rails 中处理全局变量

标签 ruby-on-rails ruby global-variables

我只想拥有一个全局数组,所以当我添加或删除一个元素时, 它可以反射(reflect)在类里面的任何地方。

例如:

class something
  @@my_array = Array.new
  def self.action_1
    @@my_array << 1
    @@my_array << 2
    @@my_array << 3
  end

   def self.how_many_elements
     puts "# of elements: " + @@my_array.size.to_s
   end
end

如果我执行以下操作:

something.action_1 => from controller_a

something.how_many_elements => from controller b

我总是得到以下输出:

"# of elements: 0"

为什么?

最佳答案

一个常见的错误是认为您可以将东西藏在您的类中并且它们会在请求之间持续存在。如果发生这种情况,纯属巧合,是您不能依赖的行为。

以这种方式使用全局变量几乎不是一个好主意。结构合理的 Rails 应用程序应该将数据保存在 session、数据库或 Rails.cache 子系统中。

在开发模式下,Rails 处理的每个请求都将以几乎干净的状态开始,所有模型、 Controller 、 View 和路由每次都从头开始重新加载。如果您将东西放在类里面并认为下次它会出现在您身边,您将会大吃一惊。

要保存不重要的东西,请使用 Rails 缓存或 session 工具。要保存重要的东西,请使用数据库。

关于ruby-on-rails - 如何在 Ruby on Rails 中处理全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8314407/

相关文章:

java - 是否存在与 Java 的 Wicket 等效的 Ruby?

ruby-on-rails - 我的 Heroku 和 Godaddy SSL 配置有什么问题?

ruby - jekyll 再生失败,出现 unicode 帖子

c# - 在 c#.net winforms 中保存变量的值

c - 如果我传递一个变量的地址,我必须返回吗?

java - 防止 Beanshell 中的变量消失

ruby-on-rails - Rails 3 真实性 token

ruby-on-rails - rails : Is the devise gem secure?

arrays - 试图从数组中求和

ruby-on-rails - Rails 条件下,如何解决从数组中删除 nils 的问题?