Ruby on rails 如何在请求结束之前在Rails中持久化会话?
我使用Rails2.3和ActiveRecord作为会话存储,我希望避免在需要之前创建会话 我有一个Itens表来存储与会话相关联的项,即,它的模型有一个关联:session 我有一个Ajax调用,它应该创建一个新项。当还没有会话时,它应该创建一个与该项关联的会话。 为此,我需要sessions表中的id,而不是用于通过cookie标识session的session\u id。 但是,会话记录仅在请求完成后在DB中创建。 例:Ruby on rails 如何在请求结束之前在Rails中持久化会话?,ruby-on-rails,session,activerecord,session-store,Ruby On Rails,Session,Activerecord,Session Store,我使用Rails2.3和ActiveRecord作为会话存储,我希望避免在需要之前创建会话 我有一个Itens表来存储与会话相关联的项,即,它的模型有一个关联:session 我有一个Ajax调用,它应该创建一个新项。当还没有会话时,它应该创建一个与该项关联的会话。 为此,我需要sessions表中的id,而不是用于通过cookie标识session的session\u id。 但是,会话记录仅在请求完成后在DB中创建。 例: 模型对象不应该知道Pat Maddox来自的会话的任何信息 这是有意
模型对象不应该知道Pat Maddox来自的会话的任何信息 这是有意义的,因为如果我决定将会话存储在内存、cookie、文件系统或任何地方,模型代码中没有任何更改 因此,解决方案是创建另一个表来存储组中的项。 如果还没有会话,请创建一个新的items_组并将其id存储在会话中。否则,从会话中检索项目\u组\u 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