我正在使用
Rails 7.1.3.2
并且刚刚安装了 activerecord-session_store (2.1.0)
。
https://github.com/rails/activerecord-session_store
一切正常 - 我在控制器中设置的会话值被保存到数据库中的会话记录中。但是,我还想在数据库的会话记录中设置一个
account_id
字段,这样我就可以在我的测试脚本中获取帐户记录的最新会话记录。
我该如何设置呢?我不知道如何获取控制器中的会话模型记录。
在文档(上面的链接)中说:“但是,您必须手动设置 session.model.id = session.session_id!ApplicationController 上的 before 过滤器是一个好地方。”
但是如果我在控制器中调用 session.model 我会得到这个异常:
undefined method `model' for an instance of ActionDispatch::Request::Session
如果我调用 session.id
,那么我会得到一个字母数字字符串,它是会话 cookie 的值,但它与数据库中存储在
id
字段和
session_id
字段中的值不同。我实际上需要做的就是获取当前会话记录的
数据库id,然后我可以使用sql查询更新account_id字段。有谁知道我如何访问实际模型记录?
session.model
何时曾经是你可以做的事情,也许当这个 gem 是 Rails v3 的一部分时。我发现的最好方法是直接使用会话模型:
ActiveRecord::SessionStore::Session.find_by_session_id(session.id.private_id)
还有这个位
request.env[SESSION_RECORD_KEY] = session
env
之前加载会话:
session.send(:load!)
model = request.env["rack.session.record"]