Paris on Rails 2008

Ouverture de session

Commentaires récents

Syndication
Flux XML

Relation N:N d'une table avec elle-même

Relation N:N d'une table avec elle-même
Posté par cissou06 le Lundi, 28 Juillet, 2008 - 4:47pm. Trucs & Astuces

Bonjour!

Dans mon application j'ai une table users (avec nom, prénom etc...) et j'aimerais mettre en place une relation permettant à un user d'avoir des amis (qui sont eux mêmes des users). Je me retrouve donc avec une relation N:N entre users mais je ne sais pas du tout comment déclarer tout ça dans le modèle... Est-ce que ce que je veux faire n'est pas possible ou y-a-t'il une solution?

J'ai vu qu'avec une relation 1:N (qui vient en fait d'une hiérarchisation, par exemple employé et manager) on peut faire des tables dites autoréférencielles mais je n'arrive pas à l'adapter à mon cas...

Si quelqu'un peut m'aider à y voir plus clair c'est avec plaisir!



[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | sujet précédent | sujet suivant | envoyer par email ]

Options d'affichage des commentaires
Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder" pour activer vos changements.

Sujet: 
habtm
Auteur: 
Fabien Jakimowicz
Date: 
Lun, 28/07/2008 - 17:24

Il te faut une table pour faire la jointure :


create_table :contacts_users, :id => false do |t|
  t.column :user_id, :integer
  t.column :contact_id, :integer
end

Puis dans ton modèle user :


has_and_belongs_to_many :contacts,
  :class_name => 'User',
  :join_table => 'contacts_users',
  :association_foreign_key => 'contact_id'

http://fabien.jakimowicz.com


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Sujet: 
Et avec has_many through?
Auteur: 
cissou06
Date: 
Mar, 29/07/2008 - 10:30

Et si je dois en plus avoir la date à laquelle 2 users sont devenus amis il faudrait que j'utilise un has_many through non?

Dans ce cas il faut que je crée une table contacts (avec un id cette fois) contenant les champs user_id, contact_id et contact_date.

Ensuite dans user.rb :
has_many :users, :through => :contacts
:class_name => 'User',
:join_table => 'contacts_users',
:association_foreign_key => 'contact_id'

Et dans contact.rb :
belongs_to :user

Est-ce que ce serait correct?


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Sujet: 
La table de jointure
Auteur: 
cissou06
Date: 
Lun, 28/07/2008 - 18:12

Merci, je ne savais pas comment exprimer ma relation habtm!

Par contre en lisant ta réponse je viens de me rendre compte que j'ai une table de jointure dans mon appli pour laquelle je n'ai pas pensé à faire :id => false... C'est peut-être une question bête, mais est-ce que ça peut poser problème?


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Sujet: 
oui une table de jointure
Auteur: 
dam5s
Date: 
Lun, 28/07/2008 - 21:59

oui

une table de jointure pour has_and_belongs_to_many (pas has_many through) ne doit pas avoir d'id.

--
Damien
http://www.webdrivenblog.com/


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Nouveaux liens

Sondage
Lorsque je développe avec Ruby on Rails c'est principalement sous:
Linux
37%
Mac OS X
30%
Windows
32%
(Free|Open|Net) BSD
1%
Autre...
1%
Nombre de votes: 374

Qui est en ligne
Il y a actuellement 1 utilisateur et 58 invités en ligne.

railsfrance.org - communauté francophone des utilisateurs de Ruby on Rails
[ Hébergement et ressources techniques gracieusement fournis par la SSLL Nuxos Group ]