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_user
nil
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?