2012-12-28 15 views
5

Ho un rotaie 3.2 app con Devise 2.1percorsi after_sign_out unici con più modelli con Devise e rotaie

ho 2 modelli utilizzando ideare (AdminUser e Utente)

Modelli:

class AdminUser < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable 
end 

class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable 
end 

Ho generato viste separate per entrambi i modelli tramite il generatore di effetti. viste/escogitare cartella per AdminUser (mesi attuate in precedenza prima del nuovo requisito) Visto/cartella Utenti per il modello d'uso

Dopo signout, voglio reindirizzare ad azioni specifiche che corrispondono ai modelli testamentaria. Il seguente codice funziona in application_controller.rb ma sta applicando ad entrambi i modelli che voglio fare a meno:

def after_sign_out_path_for(user) 
    user_landing_path 
end 

firma di entrambi i modelli reindirizza alla stessa pagina di destinazione, ma mi piacerebbe avere una destinazione unica per entrambi i modelli inventati.

Come posso ottenere questo risultato?

risposta

0

Alcune cose che potreste fare:

case user.class 
when AdminUser.class 
    do_admin_sign_out() 
when User.class 
    do_user_sign_out() 
else 
    no_idea_who_you_are() 
end 

o

if user.kind_of? AdminUser 
    do_admin_thing() 
else 
    do_user_thing() 
end 

In alternativa, è possibile aggiungere un controllo admin? ad entrambi i modelli, e verificare che, ad esempio:

if user.admin? 
    do_admin_thing() 
... 

Probabilmente lo farò più tardi, perché potrebbe accadere altrimenti, ma queste sono tra le tue opzioni.

+0

Dove sarebbe questo codice andare nel contesto di una sequenza di concepire signout? Posso vedere gli assegni lavorare su una base ad-hoc, ma non sono sicuro di come si adatti in questo caso in cui sto usando i controller nel motore Devise – koa