Rails 7 ActiveRecord::SessionStore - 如何获取控制器中当前会话的数据库ID?

问题描述 投票:0回答:1

我正在使用

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字段。有谁知道我如何访问实际模型记录?

ruby-on-rails ruby session activerecord rubygems
1个回答
0
投票
查看代码,我不知道

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"]


© www.soinside.com 2019 - 2024. All rights reserved.