Rails 7 ActiveRecord::SessionStore - コントローラーで現在のセッションのデータベース ID を取得する方法は?

概要

Rails 7.1.3.2 を使用しており、activerecord-session_store (2.1.0) をインストールしたところです。

https://translate.google.com/translate?hl=ja&sl=en&tl=ja&u=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"]