0

Als neues Mitglied dieser Community und darüber hinaus neuer in Rails (Version 5.1.1) brauche ich wirklich eure Hilfe.Rails Sitzungen, ActiveRecordStore: undefinierte Methode `[] = 'für nil: nilclass

Scheint wie meine Sitzungen - (in config/initializers/session_store.rb von Juwel gespeichert, wie in config/application.rb wie hier Active_Record_Store gem und definierte gezeigt.

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

Wie hier ActiveRecord::SessionStore - APIdock gezeigt - initialisieren nicht, und ich kann, warum nicht bekommen

Wenn ich versuche einen beliebigen Wert jeder Taste in einem Controller zugewiesen (beispielsweise Anwendung), kehrt sie Fehler:

undefined method []=' for nil:nilclass 

Pry Juwel schreibt das gleiche, dann, dass die nur session - ist Null, und für request.session - <ActionDispatch::Request ::Session:0x7f92db05ae18 not yet loaded> . Sitzungstabelle wird migriert, alles versucht, was ich kann.

Bitte, helfen Sie müde noob initialisieren und endlich den Wert der Sitzungen und damit sie funktionieren! Dank

Antwort

2

Von der rails documentation on the topic

"Sie können Ihre eigene Sitzung Klassenimplementierung, ob eine feature-packed Active Record oder ein Bare-Metal-High-Performance-SQL Speicher zur Verfügung stellen, indem Sie"

ActiveRecord::SessionStore.session_class = MySessionClass 

Sie müssen diese Methoden implementieren:

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 

Alternativ I found this possible solution:

Ich habe einen Weg gefunden, die Initialisierung der Sitzung zu erzwingen. Der Zugriff auf die Sitzung erzwingt anscheinend keine Initialisierung, sondern das Schreiben in die Sitzung. Was ich in meinem Controller tun, ist dies jetzt:

class MyController < ApplicationController 
    protect_from_forgery 

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

Noch bin ich nicht sicher, ob dies sollte ein normales Verhalten in Rails in Betracht gezogen werden. Es sieht nicht richtig aus, dass ich in die Sitzung schreiben muss, um die Initialisierung zu erzwingen. Lesen sollte genug sein.

+0

Hat dies zur Lösung Ihres Problems beigetragen? –

Verwandte Themen