Frage

Ich verwende Rails 2.3 und ActivereCord als Sitzungsgeschäft und möchte vermeiden, Sitzungen zu erstellen, bevor es benötigt wird.

Ich habe eine ITens -Tabelle, um Artikel zu speichern, die der Sitzung zugeordnet sind, dh das Modell hat einen Zusammenhang belongs_to :session.

Ich habe einen Ajax -Anruf, der ein neues Element erstellen sollte. Wenn noch keine Sitzung vorhanden ist, sollte es eine erstellen, die dem Element zugeordnet ist. Dafür brauche ich die ID aus der Sitzungstabelle, nicht die Sitzung, die zum Identifizieren der Sesssion vom Cookie verwendet wird. Der Sitzungsdatensatz wird jedoch erst in DB erstellt, nachdem die Anfrage beendet ist. 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
War es hilfreich?

Lösung

"Modellobjekte sollten nichts über die Sitzung wissen" (Pat Maddox von http://markmail.org/message/4ilmpn7S3WKQ6IOD).

Und dies ist sinnvoll, da ich mich entschlossen habe, Sitzung in Speicher, Cookie, Dateisystem oder wo immer zu speichern, wird im Modellcode nichts geändert.

Die Lösung besteht also darin, eine andere Tabelle zu erstellen, um items_groups zu speichern. Wenn es noch keine Sitzung gibt, erstellen Sie eine neue items_group und speichern Sie ihre ID in der Sitzung. Andernfalls rufen Sie items_group_id aus der Sitzung ab und wir sind fertig!

Wenn die Sitzung in der Datenbank gespeichert wird, spielt keine Rolle mehr.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top