2011-12-02 53 views
1

我使用Rails 2.3和ActiveRecord作爲會話存儲,我希望避免在需要之前創建會話。如何在請求結束之前在Rails中保持會話?

我有一個Itens表來存儲與會話相關的項目,即它的模型有一個關聯belongs_to :session

我有一個應該創建一個新項目的Ajax調用。當沒有會話時,它應該創建一個與該項目相關聯的會話。 爲此,我需要來自會話表的id,而不是用於通過cookie識別sesssion的session_id。 但是,會話記錄僅在請求完成後纔在數據庫中創建。 例如:

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)。

這是有道理的,因爲如果我決定將會話存儲在內存,cookie,文件系統或任何地方,模型代碼中沒有任何更改。

因此,解決方案是創建另一個表來存儲items_groups。 如果還沒有會話,請創建一個新的items_group並將其id存儲在會話中。否則,從會話中檢索items_group_id,我們就完成了!

當會話存儲在數據庫中不再重要。

相關問題