2012-02-13 14 views
0

動的に変更されるRUBYの動的配列を取得しようとしていました。私はクラス変数にプッシュすることができませんでした。どのように私はそれを行うことができますいずれかの助けて下のコードを参照してください。Rubyのクラス変数インスタンス変数

class SampleController < ApplicationController 

    @@array = [] 
    @@x = 0 

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

end 

私の質問は、私たちがメソッドajax_dataに呼び出すが、それは常にこの[ [0, y] ]のように一つの値の出力を与えるたび、クラス変数@@arrayは、配列のサイズを増やす必要があるということです。私は@@array and @@xの値を増やしたいと思います。

どうすればいいですか?

+0

私はあなたのコードを使用して、@@配列http://pastie.org/3372267 – ck3g

答えて

3

Ruby on Railsは、開発モードでは、デフォルトで、各リクエストでソースファイルをリロードします。 "プログラム"の状態をクラス変数に保存しているので、クラスのリロードによって変更が一掃されます。

ところで、クラス変数は、本質的にグローバルなので、通常は慎重に使用されます。特にRails Webアプリケーションの場合クラスのコンテキストではなく、データベースにすべての状態を保存します。

更新:

Webサーバのプロセスは通常、ステートレスことになっていることを覚えておいてください。また、通常は本番環境で稼働する複数のプロセスがあります。つまり、どのプロセスが要求に応答するかによって、カウンタは要求ごとに異なります。また、プロセスを再起動することができます。つまり、カウンタが失われます。 Railsでは

何かが、このトリッキーであれば、それは通常、あなたがやるべきではありません:)

をあなたが本当にDBを使用しない場合は何かをしようとしていること、および場合カウンターがあなたのページのすべての訪問者にとってグローバルではないと思われる場合は、カウンターをクッキーに保存してみてください:http://api.rubyonrails.org/classes/ActionDispatch/Cookies.html

+0

返信パーマに感謝します。要求がルビのそのメソッドに来たときに@@配列を増やすなど、この機能を実行する方法はありますか?私はデータベースに保存したくない。 – user1204730

+0

私は自分の答えを更新した。 –

+0

ありがとうパーマー。それを試み、あなたに知らせる – user1204730

関連する問題