ruby on rails - idear: instancia el usuario_actual que usa herencia de tabla única
ruby-on-rails ruby-on-rails-3 (2)
Estoy utilizando Rails 3.0.9 y diseño para la autenticación. Ahora trato de usar herencia de tabla única porque necesito usar polimorfismo, así que tengo dos clases: UserType1 y UserType2, que heredan de la clase User. Necesito esa instancia de Devise correctamente el usuario actual dependiendo del tipo de usuario.
Por ejemplo,
class User < ActiveRecord::Base
#devise and other user logic
end
class UserType1 < User
def get_some_attribute
return "Hello, my type is UserType1"
end
end
class UserType2 < User
def get_some_attribute
return "Hello, my type is UserType2"
end
end
In controller
class MyController < ApplicationController
def action
@message = current_user.get_some_attribute #depending the type using polymorphism
render :my_view
end
end
Deberá agregar el método get_some_attribute
dentro del modelo de User
Module User < ActiveRecord::Base
#devise and other user logic
def get_some_attribute
#You can put shared logic between the two users type here
end
end
luego, anularlo en los subtipos de usuario, como este:
Module UserType1 < User
def get_some_attribute
super
return "Hello, my type is UserType1"
end
end
Module UserType2 < User
def get_some_attribute
super
return "Hello, my type is UserType2"
end
end
Entonces, current_user.get_some_attribute
funcionará como esperabas, si quieres leer más acerca de los métodos de anulación en Ruby, puedes leer sobre esto aquí
get_some_attribute
super
porque asumí que tienes cierta lógica compartida en get_some_attribute
, ya que llamará get_some_attribute
en el modelo de usuario, puedes eliminarlo si no lo necesitas.
¡Buena suerte!
es exactamente lo que necesita: http://blog.jeffsaracco.com/ruby-on-rails-polymorphic-user-model-with-devise-authentication
debe anular el método de inicio de sesión en el controlador de la aplicación, espero que ayude.