Buenas!
Hace pocos meses decidí aprender a utilizar Ruby on Rails, y tras
aprender algo de Ruby y realizar algunos proyectos en RoR por
videotutoriales decidí comenzar mi propio proyecto. Una vez hecho un
diagrama de las clases y relaciones que necesitaré me encuentro con mi
primer problema y es que necesito varios perfiles de usuarios donde para
algunos tipos de usuarios se requerirá mas información que para otros.
Además que cada tipo de usuario, una vez registrados, tendrán diferentes
paginas home con diferentes funciones.
Mi intención es realizar una asociación polimórfica desde el model User,
generado por devise, que contenga los atributos comunes de todos los
tipos de usuarios (email, nombre, contraseña) hacia los modelos de los
tipos de usuario (cocinero, cantante, deportista,…), es decir:
class User < ActiveRecord::Base
…
belongs_to :meta, :polymorphic => true
end
class Chef < ActiveRecord::Base
has_one :user, :as => :meta
end
…
(demás clases)
Segun pensé, la clase de cada usuario quedaría registrado al momento del
registro, desde el propio formulario de registro de devise añadiendo un
seleccionador desplegable que elija un único tipo de usuario. Y para
iniciar sesión solo hará falta la contraseña y el email, sin el
seleccionador.
Pero la verdad no tengo ni idea de como realizar esto (no se como
habilitar el seleccionador para que registre la clase de usuario y hacer
las modificaciones pertinentes en el controlador Registrations de
devise, ni como redireccionar a paginas diferentes de acuerdo al tipo de
usuario que inicie sesión).
Os pido ayuda por si habeis lidiado con un problema similiar, por si
conoceis alguna manera de realizar esto, o si hay otra manera más fácil
e eficiente.
Perdonad si he dicho algún concepto mal, pero llevo poco tiempo
utilizando ruby on rails y estoy un poco perdido.
Muchas gracias de antemano y un saludo!
PD: Me gustaría evitar el uso de gemas, como camcam, para esto pues he
estado viendo que es necesario muchos condicionales que, a mi parecer,
sobrecargan el sistema. También leí conceptos como STI (singular table
inheritance), pero creo que no sería aplicable al guardar información
variable para cada tipo de usuario.