0

作为这个社区的新成员,而且在Rails中更新(5.1.1版本),我真的需要你的帮助。Rails会话,ActiveRecordStore:undefined方法`[] ='为零:nilclass

好像我的会议 - 如下所示Active_Record_Store gemconfig/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所示 - 不初始化,我不能明白为什么

当我尝试在任何控制器分配给任何键的任何值(例如,应用程序),则返回错误:

undefined method []=' for nil:nilclass 

撬宝石写相同,然后只是session - 是零,并为request.session - <ActionDispatch::Request ::Session:0x7f92db05ae18 not yet loaded> 。会话表被迁移,尽我所能地尝试。

请帮助疲倦的noob初始化它,并最终访问会话的价值,并使其工作!由于

回答

2

rails documentation on the topic

“你可以提供你自己的会话类的实现,无论是功能丰富的活动记录或裸机高性能的SQL存储,通过设置”

ActiveRecord::SessionStore.session_class = MySessionClass 

您必须实现以下方法:

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

这有助于解决您的问题吗? –

相关问题