作为此社区的新成员,而且在Rails(版本5.1.1)中更新,我真的需要你的帮助。
似乎就像我的会话一样 - (存储在config/initializers/session_store.rb
中的宝石,如Active_Record_Store gem所示,并在config/application.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
Pry gem写的相同,然后只是session
- 为零,而request.session
- <ActionDispatch::Request ::Session:0x7f92db05ae18 not yet loaded>
。会话表已迁移,我尽我所能。
请帮助累了noob初始化它,最后访问会话的价值并使它们工作!感谢
答案 0 :(得分:2)
来自rails documentation on the topic
“通过设置”
,您可以提供自己的会话类实现,无论是功能丰富的Active Record还是裸机高性能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中的正常行为。我不得不写入会话以强制初始化。阅读应该足够了。