2011-09-17 9 views
4

質問1:

Railsアクション(メソッド)のインスタンス変数の範囲はどのようなものですか。サーバーへの各接続はコントローラの新しいインスタンスを形成しますか?例えばRailsに関するRubyインスタンスとグローバル変数

  • ユーザAが@randIntと呼ばれるランダムなインスタンス変数が生成させる、 'セッター' ページをロードします。
  • User_B(別の場所の別のPCから)が「getter」ページを読み込み、@randIntをリクエストしています。

User_Bは、User_Aによって設定された@randIntを取得しますか?あるいは、User_Aの接続に固有のインスタンス変数ですか?

質問2:

質問2質問1、代わり@@randIntを使用するのと同じです。質問2の答えが「はい、両方のユーザーがこの値を見ることができる」場合、Railsでグローバル変数を使用して、複数のユーザーに共有したい一時的なデータを格納することは容認されます。高度に

おかげで、

デレク

答えて

2

質問1:いいえ、インスタンス変数のみ「インスタンス」はコントローラのインスタンスを参照し、そのためこれらインスタンス、共有されています変数は1つのリクエストの最後だけです(したがって、User_Bは異なる@randIntを受信します)。

質問2:@@変数はグローバル変数ではありません。$ variables are@@はクラス変数です。リンクで説明されているように、さまざまなマシンインスタンス(FCGIを使用している場合など)はではなく、のグローバル変数($)を共有しないので、使用しないでください。

グローバルの定数が必要な場合は、それらをconfigに設定します。グローバル変数はおそらくデータベースに残されているほうが良いでしょう(私はサイト設定などの使い方を見ることができますが、データベースでの使用に最適です)。

クラス変数をpersistant instance variablesとして使用することもできますが、データベースを使用してクラスを再ロードすること(つまりクラス変数をリセットすること)が保証されていない場合には、

+0

感謝します。これは本当に私のためにそれをクリアする! – Derek

+1

実際のレールセッションとの混乱を招くので、おそらく* session *という用語は使用しません。実際には、各要求は新しいコントローラインスタンスを作成し、インスタンス変数は要求の期間有効です。 –

+0

私はそれを考えましたが、もっと考えが必要です。あなたは絶対に正しいです、混乱をクリアするために答えを更新しました(うまくいけば)。 – Alex

関連する問題