Ayuda para modelar agenda de contactos

Buenas,

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

¿Es correcto esto?

Saludos

hola,

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