2010-11-25 23 views
1

L'utilisation de tables jointes dans des rails me pose toujours des problèmes, en particulier lorsque je dois créer des doublons lorsque la réciprocité est supposée. C'est à dire. J'ajoute quelqu'un en tant qu'ami et je deviens automatiquement le leur == deux jointures requises. Prenez une application de recettes simple qui garde la trace entre deux personnes, qui ont dépensé quoi.Comment gérer les effets secondaires de la duplication lors de l'utilisation de tables Joins - par exemple, les relations réciproques etc

Un UTILISATEUR peut avoir plusieurs AMIS. Pour chaque AMI, ils peuvent suivre plusieurs TABS (c'est-à-dire, un onglet pour les courses, un autre pour les factures, etc.), chacun avec plusieurs RECETTES ajoutées par l'un ou l'autre des UTILISATEURS. J'ai donc besoin d'une table FRIENDSHIP et j'ai besoin de créer deux amitiés si je suppose qu'un utilisateur en déclare un autre en ami, le geste est réciproque. Ici se trouve mon problème. J'ai besoin de lier le TAB partagé aux deux FRIENDSHIPS. C'est en gros dire

une amitié a beaucoup d'onglets et un onglet a de nombreuses amitiés.

Ceci implique une autre table de jointure ... ai-je raison?

Il semble juste que beaucoup de duplication et je me demande s'il y a une meilleure façon de le faire ou comment gérez-vous sainement cela dans votre code? Est-ce que vous créez beaucoup de rappels pour vous assurer que lorsque quelque chose est fait pour une amitié, c'est répété pour l'autre aussi?

Répondre

1

Voici une approche plausible, sinon le meilleur:

http://www.dweebd.com/sql/modeling-bidirectional-graph-edges-in-rails/

+0

c'est génial. Bien que j'ai trouvé une solution plus simple à la fin, j'ai essayé d'utiliser son approche et cela a fonctionné. En fin de compte, je viens de créer une association directe entre l'onglet et l'utilisateur. Je pense qu'essayer d'aller au niveau le plus profond n'est pas si chaud pour la performance de toute façon. Merci encore. – robodisco

0

Je peux me tromper ... corrigez-moi si je me trompe, juste commencé rails

User 
has_many :friend , :through => friendship 
has_many :tab , :through => friend 

Friendship 
belong_to :user 
belong_to :friend , :foreign_key => "user_id" , class_name => "User" 
+0

c'est appel imbriqué par – wizztjh

+1

son wizztjh merci pour votre réponse. Le problème est avec les relations de style facebook, c'est-à-dire que je suis votre ami, donc par conséquent, vous êtes mon ami, il faut souvent dupliquer mais inverser la ligne dans la table des jointures. consultez les rails sur les amitiés je pense qu'il mentionne cela. – robodisco