ruby-on-rails ruby-on-rails-3 devise single-table-inheritance

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!