2011-12-02 6 views
1

저는 세션 저장소로 Rails 2.3과 ActiveRecord를 사용하고 있습니다. 필요하기 전에 세션 생성을 피하고 싶습니다.요청이 끝나기 전에 레일스에서 ​​세션을 유지하는 방법은 무엇입니까?

세션에 연결된 항목을 저장하는 Itens 테이블이 있습니다. 즉, 해당 모델에 연관 belongs_to :session이 있습니다.

새 항목을 만들어야하는 Ajax 호출이 있습니다. 아직 세션이 없으면 항목에 연결될 세션을 만들어야합니다. 이 경우 세션 테이블의 ID가 필요하며 쿠키가 세션을 식별하는 데 사용되는 session_id는 필요하지 않습니다. 그러나 세션 레코드는 요청이 완료된 후에 만 ​​DB에 만들어집니다. 예 :

def create 
    request.session_options[:id] # nil if there is no session yet 
    session[:activate] = 1 # this "creates" the sesssion (but not in DB) 
    request.session_options[:id] # now the new generated session_id 
    db_session = Session.find_by_session_id(request.session_options[:id]) # nil, not in DB yet :(
    Item.new(
    :session_id => db_session.id, # ops, id called for nil object 
    :data => params[:data] 
) 
end 

답변

0

"모델 객체가 세션에 대해 아무것도 알지 못한다"(http://markmail.org/message/4ilmpn7s3wkq6iod에서 팻 매덕스).

메모리, 쿠키, 파일 시스템에 세션을 저장하기로 결정한 경우 모델 코드에서 변경된 사항이 없으므로 의미가 있습니다.

그래서 해결책은 items_groups를 저장할 다른 테이블을 만드는 것입니다. 아직 세션이 없으면 새 items_group을 만들고 해당 ID를 세션에 저장하십시오. 그렇지 않으면, 세션에서 items_group_id를 검색하면 끝났습니다!

세션이 데이터베이스에 저장되면 더 이상 중요하지 않습니다.