2012-04-04 2 views
0

Ich benutze Devise, um mit meiner Authentifizierung zu helfen, und aus verschiedenen Gründen habe ich einige Unterklassen des Benutzermodells, das hilft, die Bedenken für die Registrierung und einige andere Geschäftslogik zu trennen.Benutzervererbung und user_signed_in erstellen? und current_user

Die Unterklassen von User sind Affiliate und Admin (und ich könnte in Zukunft mehr haben), von denen alle alle Daten in der Benutzertabelle speichern (keine separaten Tabellen).

Alle Benutzer können sich über die Standard-Ressource users anmelden (/users/sign_in). Allerdings habe ich hier ein Problem.

Wenn sich der Benutzer über die Ressource /users/sign_in anmeldet, kann ich auf den user_signed_in? und current_user Helfer zugreifen und dann auf alle anderen Active Record-Zuordnungen zugreifen. Das ist was ich will! Woo hoo! Das funktioniert großartig. Das Gleiche gilt jedoch nicht für einen Benutzer, der sich als Affiliate anmeldet. Da das Gerät automatisch den Benutzer anmeldet (was ich will) erwarte ich, dass user_signed_in? gleich true und current_user der Benutzer ist, der gerade angemeldet hat. Dies ist nicht der Fall, wenn ein Benutzer sich über die Ressource /affiliate/sign_up anmeldet.

Auf dem Affiliate Modell (denken Sie daran, die Unterklassen es Benutzer wie solche class Affiliate < User) Ich habe erzeugt (durch devise) ein separater Satz von Controller/Ansichten für sign_up so kann ich ein bisschen diesen Prozess anpassen (wie der sign_up Prozess ist ein bisschen mehr für diesen speziellen Typ von Benutzer angepasst). Wenn sich der Benutzer über diese Ressource /affiliate/sign_up anmeldet, wird der Affiliate dann angemeldet, aber JETZT ist die current_usernil und user_signed_in? ist false. Aber die Helfer current_affiliate sind ein hydratisiertes Objekt und affiliate_signed_in? ist wahr.

Was ich tun möchte, ist in der Lage sein Helfer für den Zugriff auf eine Art von - den user_signed_in? Helfer und die current_user Helfer nicht das Kind affiliate_signed_in? und current_affiliate. Ich möchte nur zugreifen: current_user und user_signed_in nur. Das user_signed_in? und current_user zurückgegeben Affiliate Unterklassen User zurückgegeben den aktuellen Benutzer (aka: Affiliate)? Warum funktionieren die Helfer current_affiliate und affiliate_signed_in?, aber nicht die user -lichen nicht?

Gibt es eine Möglichkeit, das Framework immer current_user und user_signed_in? Helfer zu verwenden, da alles das User Modell unterklassifiziert?

Antwort

0

Die Art und Weise, wie Sie es einrichten, scheint, dass Sie sich gleichzeitig als Benutzer und Affiliate anmelden können. Das bedeutet, dass zu einem bestimmten Zeitpunkt ein current_user und ein current_affiliate vorhanden sein können. Wenn Sie möchten, dass es die ganze Zeit current_user ist, können Sie die Devise-Helfer überschreiben. Aber Sie müssen sicherstellen, dass nur ein Benutzer ODER ein Affiliate über eine Sitzung angemeldet sein kann. Else Devise hat keine Möglichkeit zu wissen, welches Objekt für current_user zurückgegeben werden soll.