2011-08-28 6 views
9

Ya he visto publicaciones similares, pero no pude obtener la respuesta que necesitaba.idear y STI cómo iniciar sesión como clase base en el registro

Tengo un modelo de usuario y el uso de STI es un modelo de estudiante que es un tipo de usuario.

Cuando creo un nuevo alumno, Devise inicia sesión en ese alumno con una session_animal. El problema es que el resto de mi aplicación usa user_session. SO, ¿debería crear una nueva user_session usando student_session? y luego cerrar la sesión del estudiante?

¿O hay una forma de hacer que Devise permita la creación de un estudiante, pero inicia sesión como el modelo base de usuario?

Gracias, Anthony

+3

¿Alguna vez resolvió esto? – Smickie

Respuesta

2

Salida este post y ver si le ayuda a:

Rails: Using Devise with single table inheritance

El resumen es esencialmente hacer lo siguiente:

config/rutas. 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

Para ello se tienen que crear un controlador personalizado. Apenas una implementación de ejemplo

#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 
Cuestiones relacionadas