2011-11-29 64 views
1

我只是想有一个数组作为全球在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 

如果我执行以下操作:

something.action_1 =>从controller_a

something.how_many_elements =>从控制器B

我总是得到以下输出:

"# of elements: 0" 

为什么?

+0

的事实相当一边,你想要的这里@@类变量不会做,这是从来没有在Ruby中使用@@类变量是个好主意。忘记它们存在;改为使用class @instance变量 - 它们的功能类似,但意想不到的更少。 –

回答

5

这是一个常见的错误是认为你可以藏东西在你的班级,他们将请求之间持续存在。如果发生这种情况,那纯粹是巧合,这是一种你不能依赖的行为。

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

通过Rails的开发模式,服务将与几乎白纸,所有的模型,控制器,观点和路由每次都从头开始重新加载每个请求。如果你将课堂内容放在课堂上,那么下一次你会觉得它会出现在你的面前,你会很惊喜的。

为了节省的东西并不重要,使用Rails的缓存或会议设施。为了保存重要的东西,请使用数据库。

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 
+0

要么在正常情况下工作,虽然类变量会更可取。尽管如此,结果与类型无关。 –