2012-02-13 160 views
0

我正在试图获取一个动态数组,它将被动态更改。我无法推送到类变量。任何人都可以帮助我怎么做,请参阅下面的代码。Ruby中的类变量实例变量

class SampleController < ApplicationController 

    @@array = [] 
    @@x = 0 

    def ajax_data  
    y = (rand()*100).round() 
    @@array << [@@x,y] 
    @@x += 1 
    end 

end 

我的问题是,类变量@@array应增加数组的大小,每当我们调用方法ajax_data但它总是给人一种价值的这样[ [0, y] ]输出。我想增加@@array and @@x值。

我们该怎么做?

+0

我已经使用你的代码,并获得正确的值@@ array http://pastie.org/3372267 – ck3g 2012-02-13 08:01:27

回答

3

默认情况下,Ruby on Rails在开发模式下会在每个请求中重新加载源文件。由于您将“程序”的状态保存在类变量中,因此重新加载类会消除更改。

顺便说一句,类变量通常使用时要格外小心,因为它们本质上是全局的。特别是在Rails Web应用程序中。将任何状态保存在数据库中,而不是保存在类的上下文中。

更新:

记住,Web服务器进程通常应该是无状态的。另外,您通常在生产环境中运行多个进程,这意味着您的计数器在请求之间会有所不同,具体取决于哪个进程将回答请求。此外,进程可以重新启动,这意味着你的计数器会丢失。

在Rails中,如果事情是这样棘手的,这通常意味着你试图做一些事情,如果你真的不想使用DB你不应该做的:)

,如果计数器不应该是你的页面的所有访问者的全球性的,你可以尝试在一个cookie中存储计数器:http://api.rubyonrails.org/classes/ActionDispatch/Cookies.html

+0

感谢您的回复palmer。有没有什么办法可以做到这一点,比如增加@@数组,当请求到达ruby中的那个方法时。我不想在数据库中存储 – user1204730 2012-02-13 08:22:30

+0

我已经更新了我的答案。 – 2012-02-13 08:30:48

+0

谢谢帕尔默。将尝试并让你知道 – user1204730 2012-02-13 08:38:37