Я использую 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 — хорошее место».
Но если я вызову session.model в контроллере, я получу это исключение:
undefined method `model' for an instance of ActionDispatch::Request::Session
Если я вызову session.id
, я получу буквенно-цифровую строку, которая является значением файла cookie сеанса, но отличается от значения, хранящегося в поле id
и поле session_id
в базе данных.
Все, что мне на самом деле нужно сделать, это получить идентификатор базы данных текущей записи сеанса, а затем я мог бы обновить поле account_id с помощью sql-запроса. Кто-нибудь знает, как я могу получить доступ к фактической записи модели?
🤔 А знаете ли вы, что...
Ruby on Rails предоставляет множество готовых решений для обработки типичных задач, таких как маршрутизация и работа с базой данных.
Глядя на код, я не понимаю, когда session.model
можно было сделать, возможно, когда этот драгоценный камень был частью 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"]