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



我只想要一个全局数组,所以当我添加或删除一个元素时,它可以反映在类的任何地方。

例如:

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

如果我做以下操作:

。action_1 =比;从controller_a

。how_many_elements =比;from controller b

我总是得到以下输出:

"# of elements: 0"

为什么?

认为可以将内容存储在类中并且它们将在请求之间持续存在是一个常见的错误。如果发生这种情况,那纯粹是巧合,这是一种你不能依赖的行为。

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

Rails在开发模式下服务的每个请求都将从头开始,所有的模型、控制器、视图和路由都是从头开始加载的。如果你把东西放在课堂上,以为下次还会有,你会大吃一惊的。

保存不重要的东西,使用Rails缓存或会话功能。要保存重要的东西,请使用数据库。

使用类变量:

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

相关内容

  • 没有找到相关文章

最新更新