2009-07-12 9 views
5

Ich habe ein Problem mit Sitzungsvariablen. Ich habe zwei Controller namens 'graduate_students_controller' und 'current_students_controller'. Jeder dieser Controller steuert unterschiedliche Ansichtsdateien. Ich verwende Sitzungsvariablen mit diesen beiden Controllern, um Sitzungsinformationen zu speichern.Rails: Wie können Sie mit mehreren Controllern auf Sitzungsvariablen zugreifen?

Hier ist das Problem. Nehmen wir an, ich habe zwei View-Dateien 'reports/current_students_list', 'reports/graduate_students_list', die jeweils separat von den oben genannten Controllern kontrolliert werden.

Wenn ich nun versuche, diese beiden Webseiten aus dem selben Browser zu öffnen und gleichzeitig mit ihnen zu arbeiten, bekomme ich von der zuerst geladenen Seite den 'nil object access' Fehler. Das 'nil-Objekt' bezieht sich auf eine Sitzungsvariable, auf die die erste Seite zugreifen soll. Wenn ich jedoch eine dieser beiden Webanwendungen einzeln verwende, funktionieren sie einwandfrei.

So scheint es mir, dass Sitzungsvariablen der ersten geladenen Web-App. werden von der zweiten geladenen Web-App überschrieben. vielleicht weil die zweite Seite einen neuen Cookie über den ersten speichert?

Wie behebe ich das?

Jeder Vorschlag wird sehr geschätzt.

Um ein bisschen mehr zu verdeutlichen: Die beiden Controller gehören zur selben Rails-Anwendung. Und ich verwende nicht identische Session-Variablennamen in beiden Controllern. So kann ich nicht sehen, warum sie überschrieben werden können

Ich bin neu in Schienen und ich würde wirklich einige Hilfe bei diesem Problem zu schätzen wissen. Vielen Dank.

+0

Mit welcher Version von Rails arbeiten Sie? Befinden sich diese Controller auch in derselben Rails-App oder in verschiedenen Apps? –

+0

Hallo John, Ich benutze Schienen Version ist 2.2.2. Und meine Gems-Version, die in meiner environment.rb angegeben ist, lautet wie folgt: ----------- # Gibt die Gem-Version von Rails an, die verwendet werden soll, wenn Vendor/Rails nicht vorhanden ist RAILS_GEM_VERSION = '1.2.3 'wenn nicht definiert? RAILS_GEM_VERSION --------------- (Ich verwende momentan keine neuere Version auf meinem lokalen Computer, da dies die aktuellen Einstellungen auf unserem Produktionsserver sind. Und ich möchte meine apps nach ihnen) ja, diese Controller und View-Dateien gehören zu der gleichen Rails App. Also irgendeine Idee, was dieses Problem verursacht? Dank John – Vicer

+0

Um nur zu verdeutlichen, haben die Sitzungsvariablen, auf die diese beiden Controller zugreifen, keine gemeinsamen Namen.Es gibt also keinen Grund, dass eine Sitzungsvariable überschrieben wird, es sei denn, die zweite geladene Webseite speichert einen neuen Cookie über den vorhandenen (der, der zuerst geladene Seite gespeichert hat)? Das ist der einzig logische Grund, den ich mir vorstellen kann. Aber wie kannst du so etwas reparieren? Hat jemand schon einmal eine ähnliche Situation erlebt? – Vicer

Antwort

4

Ich bin mir nicht sicher, ob Sie zwei Apps ausführen oder sich auf zwei Controller unter derselben App beziehen. Wenn Sie sich verschiedene Web-Apps ansehen, dann denke ich, dass Sie für jede dieser Apps denselben Namen und Sitzungsschlüssel in Ihrer Umgebung verwenden. Versuchen Sie, den Schlüsselwert in Ihrem environment.rb Wechsel:

config.action_controller.session = { :key => "_myapp_session", :secret => "..." } 

Wenn Sie die gleichen Session-Variablen von zwei verschiedenen Controllern in derselben Anwendung verwendet werden, dann werden Sie brauchen, um Ihren Code zu schreiben, dies zu empfangen, obwohl ich würde das nicht empfehlen. Wenn Ihre Sitzungsdaten zugreifen, prüfen nil Werte:

session[:some_key].nil? 

und stellen Sie sicher, dass gemeinsame Code (das heißt in der application_controller.rb) wird Ihre Werte nicht überschrieben werden.

+0

Hallo Matt, ich beziehe mich auf zwei Controller in der gleichen Anwendung. Wenn Sie "gleiche Sitzungsvariablen" sagen, beziehen Sie sich auf identische Sitzungsvariablennamen, die von beiden Controllern verwendet werden? Nein, ich mache das nicht, die beiden Controller verwenden unterschiedliche Namen für ihre Sitzungsvariablen. Ich sah mir meine application.rb an und sicher genug fand ich diese: sitzung: session_key => '_StudDab_session_id' Also ich denke, das ist das Problem? Jedes Mal, wenn ich eine neue Seite lade, wird die aktuelle Sitzung überschrieben. Kann ich das beheben, indem Sie in jedem der beiden Controller eindeutige Sitzungsschlüssel angeben? – Vicer

+0

Nein - Der Sitzungsschlüssel muss für jede App eindeutig sein, nicht für die Controller in derselben Anwendung. Ich denke, irgendwo in deiner App ist ein Fehler, der den Wert in deiner Session ausräumt. Ich würde empfehlen, den Wert der Sitzungsvariablen oben in der Controller-Aktion zu protokollieren und sie dann am Ende erneut zu protokollieren. Sehen Sie, wenn sie sich ändern, und verfolgen Sie sie von dort zurück. – Codebeef

+0

Hi Matt das Ändern des Sitzungsschlüssels hat das Problem behoben. Ich werde versuchen zu untersuchen und herauszufinden, was das verursacht hat. Es ist ein ziemlich frustrierendes Problem. Danke für deine Vorschläge Matt. – Vicer

Verwandte Themen