2011-08-28 5 views
9

Ho già visto post simili, ma non ho potuto ottenere la risposta di cui avevo bisogno.Devise e STI come accedere come Base class al momento della registrazione

Ho un modello utente e utilizzo di STI un modello di studente che è un tipo di utente.

Quando creo un nuovo Studente, Devise registra in quello Studente con una sessione studente. Il problema è che il resto della mia app utilizza una user_session. SO, dovrei creare una nuova user_session usando la student_session? e poi disconnetti lo studente?

Oppure esiste un modo per consentire a Devise di consentire la creazione di uno studente, ma accedere come modello di base Utente?

Grazie, Anthony

+3

Avete mai capito questo? – Smickie

risposta

2

controllare questo post e vedere se ti aiuta:

Rails: Using Devise with single table inheritance

La sintesi è essenzialmente quello di effettuare le seguenti operazioni:

config/percorsi. rb:

devise_for :users, :controllers => { :sessions => 'sessions' }, :skip => :registrations 
devise_for :students, :skip => :sessions 

app/controllers/sessions_controller.rb:

class SessionsController < Devise::SessionsController 
    def create 
     rtn = super 
     sign_in(resource.type.underscore, resource.type.constantize.send(:find, resource.id)) unless resource.type.nil? 
     rtn 
    end 
end 
0

Per questo è necessario creare un controller personalizzato. Solo un esempio di implementazione

#POST create 
def create 
    student = Student.create(params[:student]) # normal crud with whatever your form params 
    sign_in(User.find(student.id)) # this actually signs in the user 
    # now redirect the student to the dash board/whatever page manually 
end