我正在使用Rails 7.1.3.2,刚刚安装了activerecord-session_store (2.1.0).

https://github.com/rails/activerecord-session_store

一切正常-我在控制器中设置的会话值保存到数据库中的会话记录中. 然而,我还想在数据库中的会话记录中设置一个account_id字段,这样我就可以在我的测试脚本中获取帐户记录的最新会话记录.

我实际上如何设置它? 我无法弄清楚如何获取控制器中的会话模型记录.

文档(上面的链接)中写着"However, you must set session.model.id = session.session_id by hand! A before filter on ApplicationController is a good place."

但如果我在控制器中调用会话.模型,我会得到这个异常:

undefined method `model' for an instance of ActionDispatch::Request::Session

如果我调用session.id,那么我会得到一个字母数字字符串,这是会话cookie的值,但它与数据库中存储在id字段和session_id字段中的值不同.

我实际上需要做的就是获取当前会话记录的database id,然后我就可以使用SQL查询更新account_id字段. 有人知道如何访问实际的模型记录吗?

推荐答案

查看代码时我没有看到session.model是你可以做的事情,也许当这个Ruby 是Rails v3的一部分时.最好的I figured输出是直接使用会话模型:

ActiveRecord::SessionStore::Session.find_by_session_id(session.id.private_id)

bit也引起了我的注意:

request.env[SESSION_RECORD_KEY] = session

您必须在填充env之前加载会话:

session.send(:load!)
model = request.env["rack.session.record"]

Ruby-on-rails相关问答推荐

Rails 7通过引擎将方法自动加载到控制器中的方法

在has_many关系中由两个条件 Select

Ubuntu Webhooks无法读取安装的正确RVM Ruby

Ruby on Rails 7 与 React 集成

'elseif' 还存在吗?

使用 Ruby On Rails 的多个用户模型,并设计有单独的注册路由,但只有一个共同的登录路由

Rails 模型.有效吗?刷新自定义错误并错误地返回 true

如何在 Windows 中更新 ruby

使用 RSpec 和 Capybara (Rails) 测试重定向

如何配置设计以使用自定义邮箱布局?

如何在两个日期之间生成随机日期和时间?

如何在我的 rails 应用程序中测试 ActiveRecord::RecordNotFound?

在一行中更改多个对象属性

DateTime.now 还是 Time.now?

如何找出现有 Rails 应用程序基于哪个 Rails 版本?

在本地 Rails 开发环境中获取真实 IP 地址

如何在 Rails 中测试助手?

强参数需要多个

如何在 Rails 迁移中添加一些插入?

rails 获取应用程序根/基本 url