Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在请求结束之前在Rails中持久化会话?_Ruby On Rails_Session_Activerecord_Session Store - Fatal编程技术网

Ruby on rails 如何在请求结束之前在Rails中持久化会话?

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来自的会话的任何信息 这是有意

我使用Rails2.3和ActiveRecord作为会话存储,我希望避免在需要之前创建会话

我有一个Itens表来存储与会话相关联的项,即,它的模型有一个关联:session

我有一个Ajax调用,它应该创建一个新项。当还没有会话时,它应该创建一个与该项关联的会话。 为此,我需要sessions表中的id,而不是用于通过cookie标识session的session\u id。 但是,会话记录仅在请求完成后在DB中创建。 例:


模型对象不应该知道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