Domanda

Sto usando Rails 2.3 e ActiveRecord come Session Store e voglio evitare la creazione di sessioni prima che sia necessaria.

Ho una tabella itens per archiviare gli articoli associati alla sessione, cioè il suo modello ha un'associazione belongs_to :session.

Ho una chiamata AJAX che dovrebbe creare un nuovo elemento. Quando non c'è ancora sessione, dovrebbe crearne una per essere associata all'articolo. Per questo, ho bisogno dell'ID dalla tabella delle sessioni, non della sessione usata per identificare la sede da parte del cookie. Ma il record di sessione viene creato solo in DB dopo che la richiesta è terminata. Ex:

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
È stato utile?

Soluzione

"Gli oggetti del modello non dovrebbero sapere nulla sulla sessione" (Pat Maddox da http://markmail.org/message/4ilmpn7s3wkq6iod).

E questo ha senso, poiché se ho deciso di archiviare sessione in memoria, cookie, file system o ovunque, nulla viene modificato nel codice del modello.

Quindi, la soluzione è quella di creare un'altra tabella per archiviare elementi_group. In caso di sessione, crea una nuova elementi_group e memorizza il suo ID durante la sessione. Altrimenti, Recupera items_group_id dalla sessione e abbiamo finito!

Quando la sessione è memorizzata nel database non importa più.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top