[Ror-es] Auto-relación simétrica
Diego Algorta Casamayou
Tue Feb 14 18:55:28 GMT 2006
No tengo demasiada experiencia todavía, pero creo que podrías usar un
filtro before_save().
http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html
En el método que definar para ejecutar before_save, recorrés los
contacts de ese contact y te asegurás de que el mismo también esté en
los contacts de los demás.
Otra forma sería redefinir el método << y ahí mismo, cada vez que le
agregan un contacto B al contacto A, este mismo se agrega al con tacto
B. Cuidado porque podés quedar en loop. Para evitarlo, antes de que A
intente agregarse en los contactos de B, fijate si ya está agregado.
Saludos,
Diego
Sergio Gil Pérez de la Manga escribió:
> Ole los títulos raros ;)
>
> A ver, cuento lo que quiero hacer, lo que he conseguido, y a ver si a
> alguien se le ocurre cómo puedo completar la tarea.
>
> Tengo un modelo llamado Contact, que almacena contactos, y me gustaría
> poder relacionarlos unos con otros. Leyendo un poco por ahí [1], llego a
> lo siguiente:
>
> - Creo una tabla llamada contacts_contacts, con una columna llamada
> contact_id, y otra, por ejemplo, related_id.
> - En el modelo Contact:
>
> has_and_belongs_to_many :contacts, :foreign_key => "related_id"
>
> De esta forma se puede añadir un contacto como relacionado a otro, por
> ejemplo:
>
> un_contacto=Contact.find(1)
> otro_contacto=Contact.find(2)
> un_contacto.contacts << otro_contacto
> un_contacto.contacts[0].name # "El nombre de 'otro_contacto'"
>
> Perfecto.
>
> Sin embargo, la relación que pretendo modelizar no es padre-hijo, sino
> de igual a igual, de modo que sin hacer nada más, la relación quedara
> almacenada en ambos contactos, de manera que también pudiera hacer:
>
> otro_contacto.contacts[0].name # "El nombre de 'un_contacto'"
>
> Cosa que ahora mismo no sucede. ¿Se os ocurre alguna forma de hacerlo?
> Gracias :)
>
> --
> Sergio Gil Pérez de la Manga >
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Ror-es mailing list
>
>