2011-11-11 17 views
1

when thinking about the user, password, and site variables in ActiveResource::Baseを実現しました.1回のリクエストで変更でき、次回のリクエストで変更されたままになります。これは、クラス変数/属性のすべての使用に適用されるので、望ましくない動作、おそらくは広範囲に及ぶ問題のように思えます。Railsはリクエスト間でクラス変数をリセットする方法がありますか?

Railsは、クラスレベルの状態への変更をクリーンアップ(デフォルトにリセット)するためのメカニズムを提供しているため、各要求は初期状態で開始されますか?

もしそうでなければ、各要求の始めに再適用されるクラス変数を初期化する方法を追加することは可能でしょうか?これは、スレッドセーフなストレージと組み合わせることができ、クラス変数の問題をはるかに少なくします。 class_attributeの可能な変更?

更新:

私はthe linked question aboveで説明したように、私の注意にこれをもたらした具体的なケースは、私は、ユーザーごとにActiveResource :: Base.userとパスワードを設定したという事実でした。リセットに失敗した場合、それは、後のページのロード時に別のユーザーの資格情報を使用して、あるユーザーに代わってREST要求が行われることを意味します。

答えて

0

好奇心の邪魔をして、これをやりたい理由の具体例を挙げることはできますか?それに直面して、変数の変更を要求しているように聞こえるので、Railsはあなたが求めていることをやっています。

限り答え、などいくつかのオプション:

  • 変数には、自動「デフォルトに戻す切り替える」行動はありません、ありません。
  • 各コントローラーアクションの終了時に値を手動でリセットすることができます。
  • これを実行するモジュール(「acts_as_resettable」と呼ばれますか?)を作成し、そのモジュールをこの機能が必要なクラス
+0

具体的な例を示すために投稿を更新しました。 –

+0

class_attributeを拡張することは、これが望ましい方法であると思われます。なぜなら、これは既に必要な動作(継承可能なクラスレベルの属性)を提供しているからです。それは問題ごとにスレッドの安全性を保証するために、リクエストごとに保存してリセットするデフォルト値を渡すことができ、Thread.currentを@KandadaBogguとして使用することができます。 –

関連する問題