estoy intentando modelar una agenda de contactos pero no doy con ello.
Quiero
disponer de una agenda de contactos para cada usuario donde cada usuario
tenga varios contactos y cada usuario pueda tener grupos de contactos
con un
nombre por grupo.
Ahora mismo tengo esto pero creo que no están bien las relaciones:
class User << ActiveRecord::Base
has_many :contacts
has_many :groups, :through => ;contacts
end
class Contact << ActiveRecord::Base
belongs_to :user
end
class Group << ActiveRecord::Base
belongs_to :user
belongs_to :contact
end
siempre que tengas una relación 1 -> N en la base de datos, en tu modelo
el lado del 1 es el que tiene el “has_many” y el lado del N el que tiene
el “belongs_to”. Vamos, que el que tenga la clave externa XXX_id es el
que “belongs_to” el otro modelo
en tu caso
1 user N groups
1 user N contacts
1 group N contacts
user has_many groups y has_many contacts
groups belongs_to user y has_many contacts
contacts belongs_to group y belongs_to user
Date cuenta que ese modelo puede llevarte a inconsistencias. Puedes
tener un contact unido a un user_id, y por otro lado a un group_id, y no
tienes nada en el modelo que obligue a que el group_id pertenezca al
mismo usuario. Te va a obligar a efectuar validaciones.
Si los contactos van obligatoriamente en un grupo, entonces se
simplifica y te aseguras de que un contact está en un grupo que a su vez
pertenece a un usuario. Contact no tiene información del usuario y no
puedes tener inconsistencias.
user has_many groups
group has_many contacts y belongs_to user
contact belongs_to group
En este caso, podrías unir user y contacts con un has_many :through
groups
saludos,
javier ramírez
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.