2010-11-25 18 views
8

私はこれを使用してモデルのセッションにアクセスしています。Apache Passengerデプロイメントで確認してください:モデル内のレールアクセスセッション

http://www.zorched.net/2007/05/29/making-session-data-available-to-models-in-ruby-on-rails/

誰もが、それはあまりにもApacheの+旅客の展開で動作することを確認することはできますか?

これを達成するための他の選択肢がある場合は、

おかげで、

イムラン

答えて

2

はい。これは、モデルでセッションデータを使用するのがわかった唯一の効率的な方法です。私もそれを使用し、Apache +パッセンジャーの配備上の問題に直面しませんでした。

しかし、セッション値でいつ再生するかを確認する必要があります。サーバーへの新しい要求ごとに、セッション値はスレッドに格納され、モデルにアクセスできます。スレッドの値を使ってロジックを適用する場合は、スレッドの値がnilである可能性もあることを確認してください。

私は問題が発生したので、私のすべてのコードは正常に動作しましたが、起動時に問題が発生しました。

+0

ありがとうNimsesh。 1. ActiveRecordオブザーバーで、レコードをフィールドごとに(セッションの値で)更新します。 2. current_user(restful_authentication)のフィールドを設定します。すべてのユーザーがログイン時に設定されている別の値を保持しますか? – Saim

+0

はい。もう一度見てくださいhttp://www.zorched.net/2007/05/29/making-session-data-available-to-models-in-ruby-on-rails/ ...これは 'before_filter:set_user 'これは、スレッドへの新しい要求ごとにセッション値を保存します。これは、すべてのユーザーが異なる値を保持することを意味します。誰の要求も異なり、そのような方法でスレッドは異なる値で更新し続けます。 –

25

私はインターネット上で動作するコードを見つけられなかったので、私はいくつかの研究を行い、自分自身を書きました。これはRails 3.2.xやその他のバージョンで動作します。

私はモデルからセッションにアクセスする不正なコードにつながる可能性があることを思い出させるではないでしょう、あなたのApplicationController

# Set a filter that is invoked on every request 
    before_filter :_set_current_session 

    protected 
    def _set_current_session 
    # Define an accessor. The session is always in the current controller 
    # instance in @_request.session. So we need a way to access this in 
    # our model 
    accessor = instance_variable_get(:@_request) 

    # This defines a method session in ActiveRecord::Base. If your model 
    # inherits from another Base Class (when using MongoMapper or similar), 
    # insert the class here. 
    ActiveRecord::Base.send(:define_method, "session", proc {accessor.session}) 
    end 

でこれを挿入します。 Other posts may tell you, that you are stupid。モデルからセッションにアクセスするには、Model.saveメソッドを実装するような、いくつかの有効な理由がありますが、それは現在のユーザーセッションに保存されます。

+0

素敵なテクニック。ありがとうございました! – Saim

+0

Rspecを使って正しくテストするにはどうすればいいですか?これを使用しているモデルのすべてのテストでは、 '未定義のローカル変数またはメソッドセッション 'と表示されます。 –

+0

良いソリューションありがとうございます。 –

関連する問題