【问题标题】:Rails sessions, ActiveRecordStore: undefined method `[]=' for nil:nilclassRails 会话,ActiveRecordStore:nil:nilclass 的未定义方法 `[]='
【发布时间】:2017-10-26 19:09:14
【问题描述】:

作为这个社区的新成员,而且是 Rails(5.1.1 版)的新成员,我真的需要你的帮助。

看起来像我的会话 - (由 gem 存储在 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 - 是 nil ,对于 request.session - <ActionDispatch::Request ::Session:0x7f92db05ae18 not yet loaded> 。会话表已迁移,尽我所能。

请帮助疲倦的菜鸟初始化它并最终访问会话的值并使其工作!谢谢

【问题讨论】:

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


    【解决方案1】:

    来自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 中的正常行为。在我看来,必须写入会话来强制初始化是不对的。读书就够了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 2014-04-04
      • 2013-02-05
      • 1970-01-01
      相关资源
      最近更新 更多