Ruby中的类变量实例变量

时间:2012-02-13 07:52:59

标签: ruby-on-rails ruby

我试图在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值。

我们怎么能这样做?

1 个答案:

答案 0 :(得分:3)

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

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

更新

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

在Rails中,如果某些事情变得棘手,通常意味着你正在尝试做一些你不应该做的事情:)

如果您确实不想使用数据库,并且计数器不应该是您网页的所有访问者的全局,您可以尝试将计数器存储在Cookie中:http://api.rubyonrails.org/classes/ActionDispatch/Cookies.html