0

このコミュニティの新しいメンバーとして、またRails(バージョン5.1.1)の新しいメンバーとして私は本当に助けが必要です。Railsのセッション、ActiveRecordStore:未定義のメソッド `[] = 'for nil:nilclass

は、私のセッションのように思える - (Active_Record_Store gemここに示されているとしてconfig/application.rbで定義されている宝石でconfig/initializers/session_store.rbに保存されている:。

ActiveRecord::SessionStore::Session.table_name = 'legacy_session_table' 
ActiveRecord::SessionStore::Session.primary_key = 'session_id' 
ActiveRecord::SessionStore::Session.data_column_name = 'legacy_session_data' 

ここActiveRecord::SessionStore - APIdock示すように - 初期化しないと、私は理由を取得することはできません

iは任意のコントローラ(例えば、アプリケーション)内の任意のキーに任意の値を代入するとき、それはエラーを返し:

undefined method []=' for nil:nilclass 

Pry gemが同じ書き込みをした後、ちょうどsession - がnilで、request.session - <ActionDispatch::Request ::Session:0x7f92db05ae18 not yet loaded> の場合。セッションテーブルが移行され、できる限り試されます。

疲れているnoobに初期化し、最後にセッションの価値にアクセスして機能させるようにしてください。おかげrails documentation on the topic

から

答えて

2

ActiveRecord::SessionStore.session_class = MySessionClass 

を「あなたが設定することで、機能満載のActive Recordやベアメタル高性能なSQLストアかどうか、あなた自身のセッションクラスの実装を提供することができます」あなたはこれらのメソッドを実装する必要があります。また

self.find_by_session_id(session_id) 
initialize(hash_of_session_id_and_data, options_hash = {}) 
attr_reader :session_id 
attr_accessor :data 
save 
destroy 

I found this possible solution

セッションを強制的に初期化する方法が見つかりました。明らかにセッションにアクセスしても強制的に初期化されるわけではありませんが、セッションへの書き込みは強制的に行います。私のコントローラで何をしているのですか:

class MyController < ApplicationController 
    protect_from_forgery 

    def index 
    session["init"] = true 
    do_stuff 
    end 
end 

これはRailsの通常の動作と考えられるかどうかはまだ分かりません。初期化を強制するためにセッションに書き込む必要はありません。読書は十分であるはずです。

+0

これは問題を解決するのに役立ちましたか? –

関連する問題