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

con*_*t01 1 ruby ruby-on-rails global-variables

我只想将数组作为全局数组,因此当我添加或删除元素时,它可以反映在类中的任何位置.

例如:

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
Run Code Online (Sandbox Code Playgroud)

如果我做以下事情:

来自controller_a的 something.action_1 =>

来自控制器b的 something.how_many_elements =>

我总是得到以下输出:

"# of elements: 0"
Run Code Online (Sandbox Code Playgroud)

为什么?

tad*_*man 5

认为你可以在课堂上藏匿东西并且它们会在请求之间保持不变是一个常见的错误.如果发生这种情况,那纯属巧合,这是一种你不能依赖的行为.

以这种方式使用全局变量几乎是个坏主意.正确结构化的Rails应用程序应该将数据保存在session数据库或Rails.cache子系统中.

Rails在开发模式下提供的每个请求都将从一个几乎干净的平台开始,每次都会从头开始重新加载所有模型,控制器,视图和路由.如果你把一些东西放在一个认为它会在下一次出现在你身边的课堂上,那你就会感到惊讶.

要保存不重要的内容,请使用Rails缓存或会话工具.要保存重要的内容,请使用数据库.