我试图在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 :(得分:3)
Ruby on Rails,在开发模式下,默认情况下会在每个请求中重新加载源文件。由于您在类变量中保存了“程序”的状态,因此重新加载类会使更改消失。
顺便说一下,类变量通常非常谨慎使用,因为它们本质上是全局变量。特别是在Rails Web应用程序中。将任何状态保存在数据库中,而不是在类的上下文中。
更新
请记住,Web服务器进程通常应该是无状态的。此外,您通常在生产中运行多个进程,这意味着您的计数器在请求之间会有所不同,具体取决于哪个进程将响应请求。此外,可以重新启动进程,这意味着您的计数器将会丢失。
在Rails中,如果某些事情变得棘手,通常意味着你正在尝试做一些你不应该做的事情:)
如果您确实不想使用数据库,并且计数器不应该是您网页的所有访问者的全局,您可以尝试将计数器存储在Cookie中:http://api.rubyonrails.org/classes/ActionDispatch/Cookies.html