2010-06-04 10 views
3

Je sais que si je nomme une colonne dans une table "othertablename_id" les rails sauront utiliser cette colonne pour une relation belongs_to ou autre. Si je veux avoir plusieurs ID de la même table, cela ne fonctionnera évidemment pas, parce que j'aurais des noms de colonnes en double. Quelle est la meilleure façon de construire une table qui relie deux lignes de la même table? Comme dans une table de rendez-vous qui concerne exactement deux utilisateurs.Rails table relationnelle avec plusieurs ID de la même table

Répondre

6

Ah Je l'ai

belongs_to :user_1, :class_name => "User" 
belongs_to :user_2, :class_name => "User" 

utilisera des colonnes user_1_id et user_2_id respectivement. Les colonnes devraient être nommées quelque chose de plus descriptif bien sûr, mais c'est assez simple.

+0

Que faire si vous devez configurer une requête avec le nombre de jointures "n" à la même table? Je voudrais faire cette même action, mais avec "n" nombre de jointures, donc je voudrais quelque chose d'un peu plus élégant. –

+0

Nice, mec - c'est 2016, et cela m'aide encore. – skwidbreth

1

Un modèle comme:

Appointment 
================= 
source_user_id 
object_user_id 

aiderait?

EDIT La lecture du rails bible à la page 361, je tirai ceci:

De nombreux à-plusieurs

... Un produit peut appartenir à plusieurs catégories , et chaque catégorie may contient plusieurs produits. Ceci est un exemple d'une relation many-to-many . C'est comme si chaque côté de la relation contient une collection d'éléments de l'autre côté.

alt text http://img180.imageshack.us/img180/4004/dibujolfa.png

Dans Rails nous exprimons en ajoutant la déclaration has_and_belongs_to_many à les deux modèles. A partir de là dedans, nous abrégeons cette déclaration à « HABTM. » Beaucoup à de nombreuses associations sont symétriques, à la fois des tables jointes déclarent leur association avec chaque autre en utilisant « HABTM. »

Dans la base de données, plusieurs associations sont implémentées en utilisant une table de jointure intermédiaire . Il contient paires de clés étrangères reliant les deux tables cibles . Active Record suppose que le nom de cette table de jointure est la concaténation des deux tables cibles dans l'ordre alphabétique. Dans notre exemple , nous avons joint les catégories de la table aux produits de la table, donc Active Record recherchera une table jointe nommée categories_products.

Donc, je pense que tout ce que vous avez à faire, est d'utiliser la déclaration has_and_belongs_to_many.

+0

alors comment puis-je dire aux rails d'utiliser ces colonnes dans les relations. (belongs_to: user, PROBABLY QUELQUE CHOSE ICI DROIT?) –

+0

merci, et ce que vous dites est vrai, mais cela ne résout pas le problème que j'avais en tête.J'ai besoin de distinguer les deux lignes qui sont désignées comme des propriétés séparées. Encore une fois, merci bien. –

Questions connexes