質問

Rails 2.3とActivereCordをセッションストアとして使用しています。必要になる前にセッションの作成を避けたいと思います。

セッションに関連付けられたアイテムを保存するためのITENSテーブルがあります。つまり、そのモデルには関連性があります belongs_to :session.

新しいアイテムを作成するはずのAJAXコールがあります。まだセッションがない場合は、アイテムに関連付けられるセッションを作成する必要があります。このためには、Cookieによるsesssionを識別するために使用されるSession_idではなく、セッションテーブルからの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
役に立ちましたか?

解決

「モデルオブジェクトはセッションについて何も知らないはずです」 http://markmail.org/message/4ilmpn7s3wkq6iod).

そして、これは理にかなっています。なぜなら、私がメモリ、クッキー、ファイルシステム、またはどこにでもセッションを保存することに決めた場合、モデルコードでは何も変更されないからです。

そのため、解決策は、別のテーブルを作成して項目を保存することです。まだセッションがない場合は、新しい項目_groupを作成し、セッションにIDを保存します。それ以外の場合は、セッションからitems_group_idを取得すると完了です!

セッションがデータベースに保存されている場合は、もう問題ではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top