Decorator からセッション変数にアクセスできるようにしたい。今はそうすることができず、コントローラーのインスタンス変数にアクセスすることもできません@session_variable
.
これを達成するためのきれいな方法はありますか?
ありがとう!
Decorator からセッション変数にアクセスできるようにしたい。今はそうすることができず、コントローラーのインスタンス変数にアクセスすることもできません@session_variable
.
これを達成するためのきれいな方法はありますか?
ありがとう!
リクエスト情報にアクセスするためにコントローラー以外のオブジェクトが必要な場合、私は Context パターンと考えられるものを使用するのが好きです。次のようになります。
デコレーターが必要とするインターフェースのみを持つシングルトン クラスを作成します (インターフェース分離の原則に従います)。例として、ユーザーがログインしているかどうかをデコレーターが知る必要があるとします。LoginContext
インスタンス メソッドでシングルトンを作成しますuser_is_logged_in?
。デコレータは、 を呼び出すことによって、ユーザーがログインしているかどうかを確認できますLoginContext.instance.user_is_logged_in?
。
アクションを実行する前に、シングルトンの属性をセッションに、またはセッションに従って設定する をに追加before_filter
します。必要に応じて、リクエストの外側を何も使用しないようにする場合は、フィルタを anにして、アクションの実行後に属性を設定し、属性が nil の場合にエラーが発生するようにアクセサーを記述します。ApplicationController
user_is_logged_in
true
false
LoginContext
around_filter
nil
user_is_logged_in?
上記は単一スレッドの Rails アプリケーション サーバー用ですが、スレッド化されたアプリケーション サーバーを使用する場合は、スレッド固有のシングルトンに同じ機能を記述できます。