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

时间:2011-11-29 16:43:46

标签: ruby-on-rails ruby 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

如果我执行以下操作:

  

something.action_1 =&gt; 来自controller_a

     

something.how_many_elements =&gt; 来自控制器b

我总是得到以下输出:

"# of elements: 0"

为什么?

2 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:1)

使用类变量:

class something

  @@my_array = []

  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
   end
end