Rails会话,ActiveRecordStore:未定义的方法`[] ='为nil:nilclass

时间:2017-05-26 01:36:42

标签: ruby-on-rails activerecord undefined nomethoderror session-storage

作为此社区的新成员,而且在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初始化它,最后访问会话的价值并使它们工作!感谢

1 个答案:

答案 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中的正常行为。我不得不写入会话以强制初始化。阅读应该足够了。