2012-02-13 191 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