2014-08-06 1 views
1

내 이전 응용 프로그램은 다음과 같이 중첩 된 세션 키를 사용하여 발생 : 이것은 레일 버전 4.0 이상에서 잘 작동Rails 4.1 쿠키 세션 serializer가 중첩 세션 키를 기호에서 문자열로 변환하는 이유는 무엇입니까?

session[:nested] = {some_id: 123} 

하지만, 레일 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 

질문 : 당신은 "중첩 된 세션 키를 사용하지 않는"외에 추천 할 수있는 중 하나

은 내가 "하이브리드"세션 시리얼 라이저를 사용하여 시도,하지만 작동하지 않는 이유는 무엇입니까?

감사합니다. 알렉스.

답변

1

나는 동일한 문제에 직면했다. 나는 이것이 당신이 원하는 대답이 아니라는 것을 알고 있습니다. 그러나 그것은 효과가 있습니다.

nested_id = session[:nested]['some_id'] # => 321

편집

모든 후, 나는 config\initializers\session_store.rb

당신은 다른 코드를 변경할 필요가 없습니다에 :active_record_store:cookie_store을 변경했습니다.

nested_id = session[:nested][:some_id] # => 321

+0

감사합니다. @mitsu. 이미이 문제의 해결 방법을 발견했습니다. –