В моем старом приложении используются вложенные ключи сеанса, например:
session[:nested] = {some_id: 123}
Это прекрасно работало в Rails версии 4.0 и старше, но в Rails 4.1 это не работает: вложенные сеансовые ключи десериализуются как строки, поэтому я больше не могу ссылаться на эти вложенные значения с помощью символа следующим образом:
session[:nested][:some_id]
Однако сеансовые ключи верхнего уровня по-прежнему работают нормально:
# First action that puts values into session.
def set_session_vars
session[:some_id] = 321
session[:nested] = {some_id: 123}
end
# Second action that loads values from session.
def set_session_vars
root_id = session[:some_id] # => 321, works as expected.
nested_id = session[:nested][:some_id] # => nil, THIS DOES NOT!
end
Я понимаю, что Rails 4.1 вносит довольно значительные изменения в способ сериализации сеанса — он больше не использует Marshal.dump, вместо этого он использует базовый сериализатор JSON, который не сериализует объекты как есть. Однако он должен нормально работать для базовых типов, таких как целые числа и строки, которые я использую.
Я пытался использовать "гибридный" сериализатор сеансов, но это тоже не работает:
Rails.application.config.action_dispatch.cookies_serializer = :hybrid
Вопрос: что вы можете порекомендовать, кроме "не использовать вложенные сеансовые ключи"?
Спасибо, Алекс.