Duda con relación 1-1

Buenas,

tengo una duda a la hora de crear un módelo User y un modelo Profile. El
tema
es que un usuario siempre tiene un perfil pero un perfil no tiene porque
tener un usuario. Quiero guardar en el modelo Profile lo que me llegue
de un
formulario de contacto y si un día ese registro en el Profile se crea una
cuenta asociarlo al modelo User.

La duda es como saber si un usuario nuevo tiene un perfil creado.
¿Teniendo
dos campos iguales en los dos modelos? ¿Crear un usuario desactivado al
crear
el perfil? ¿Cuál sería la mejor forma de hacerlo?

Muchas gracias.

Antonio P. wrote:

La duda es como saber si un usuario nuevo tiene un perfil creado.

supongamos que tienes la clase User y la clase Profile que ambas heredan
de ActiveRecord::Base y que en el modelo relacional dentro de Profile
tienes una FK que apunta al id del usuario.
Si en la clase Profile creas un belongs_to :usuario y en la clase
Profile
creas un has_one :profile se creará la relación 1-1.

una buena manera de comprobar si existe un usuario de el perfil seria
navegar a través de la
relación.
Creamos una instancia de Usuario llamemosle user. Por ejemplo
user=User.find(1)
user.profile.nil? da true significa que hay profile.

Saludos!


jabberID: [email protected]
blog: http://llibertat.wordpress.com
SIP: [email protected]

user.profile.nil? da true significa que hay profile.

Me he colado. Significaría que no hay profile.

jabberID: [email protected]
blog: http://llibertat.wordpress.com
SIP: [email protected]

Antonio P. wrote:

tengo una duda a la hora de crear un m�delo User y un modelo Profile. El
tema
es que un usuario siempre tiene un perfil pero un perfil no tiene porque
tener un usuario. Quiero guardar en el modelo Profile lo que me llegue
de un
formulario de contacto y si un d�a ese registro en el Profile se crea una
cuenta asociarlo al modelo User.

La duda es como saber si un usuario nuevo tiene un perfil creado.
�Teniendo
dos campos iguales en los dos modelos? �Crear un usuario desactivado al
crear
el perfil? �Cu�l ser�a la mejor forma de hacerlo?

A ver si me aclaro…, tienes una información recogida del formulario de
contacto que guardas en objetos Profile, estos objetos tienen
información de usuarios potenciales. Cuando un usuario se da de alta
quieres saber si usar la información de “pre-usuarios” que puede haber
introducido en otro momento a través del formulario de contacto.

Tu duda me supongo es saber como enlazar estos dos objetos cuando el
usuario se da de alta, y por ello necesitas identificarlos de alguna
manera (usando el email, según comentas más abajo).

Creo que tienes dos posibilidades bastante claras:

  • Usar un campo común que los identifique, como el email (si es que es
    único entre todos los usuarios) y a partir de ahí enlazarlos usando una
    clave ajena tipo user_id en la tabla profiles.

  • La otra vía es que elimines el modelo Profile y en vez de guardar la
    información de “pre-usuario” en Profile la guarde en User, así ya tienes
    pre-creado el usuario y no duplicas la información. Lo único es que
    deberías modificar User para que puedas crear objetos en estado “no de
    alta” y así poder diferenciar cuales son perfiles y cuales son usuarios
    dados de alta finalmente.

Espero que te sirva…
Salu2

On Thursday 21 June 2007 12:36:06 Hector Muñoz wrote:

una buena manera de comprobar si existe un usuario de el perfil seria
navegar a través de la relación.

Creamos una instancia de Usuario llamemosle user. Por ejemplo
user=User.find(1)
user.profile.nil? da true significa que hay profile.

Si, con esto no hay problema, un usuario ‘siempre’ tiene un perfil pero
un
perfil no tiene porqué tener un usuario y ahí mi duda.

¿Cómo saber si al crear un usuario existe un perfil al que asociarlo. La
solución que tengo por ahora es tener un campo ‘email’ repetido en cada
tabla, que no me parece bien, o al crear el perfil crear también un
usuario
desactivado pero tampoco me convence.

¿Quizá una tabla intermedia?

Nos vemos