3

Decorator からセッション変数にアクセスできるようにしたい。今はそうすることができず、コントローラーのインスタンス変数にアクセスすることもできません@session_variable.

これを達成するためのきれいな方法はありますか?

ありがとう!

4

1 に答える 1

0

リクエスト情報にアクセスするためにコントローラー以外のオブジェクトが必要な場合、私は Context パターンと考えられるものを使用するのが好きです。次のようになります。

デコレーターが必要とするインターフェースのみを持つシングルトン クラスを作成します (インターフェース分離の原則に従います)。例として、ユーザーがログインしているかどうかをデコレーターが知る必要があるとします。LoginContextインスタンス メソッドでシングルトンを作成しますuser_is_logged_in?。デコレータは、 を呼び出すことによって、ユーザーがログインしているかどうかを確認できますLoginContext.instance.user_is_logged_in?

アクションを実行する前に、シングルトンの属性をセッションに、またはセッションに従って設定する をに追加before_filterします。必要に応じて、リクエストの外側を何も使用しないようにする場合は、フィルタを anにして、アクションの実行後に属性を設定し、属性が nil の場合にエラーが発生するようにアクセサーを記述します。ApplicationControlleruser_is_logged_intruefalseLoginContextaround_filterniluser_is_logged_in?

上記は単一スレッドの Rails アプリケーション サーバー用ですが、スレッド化されたアプリケーション サーバーを使用する場合は、スレッド固有のシングルトンに同じ機能を記述できます。

于 2016-02-14T03:39:04.743 に答える