2010-08-02 6 views
1

J'ai deux modèles que je veux connecter avec une relation m-à-m, mais je veux que la relation ait ses propres données, comme une date due ou un compte ou quelque chose comme ça ...Relations plusieurs-à-plusieurs dans les rails

Supposons que j'ai des utilisateurs, des groupes et certains objets UsersInGroups, où les utilisateurs et les groupes ont une relation has_many X, :through Y. UsersInGroups belongs_to un utilisateur et un groupe, mais possède également un join_date qui s'affiche lorsqu'un utilisateur a rejoint le groupe.

donc je peux utiliser self.groups.A pour obtenir des variables de groupe de l'utilisateur et vice versa, mais comment puis-je obtenir à la variable join_date?

Répondre

1

Dans une relation plusieurs à plusieurs, si un utilisateur peut avoir plusieurs groupes et que vous utilisez aUser.user_in_groups, il retournera un tableau des groupes (qui sera une instance de la classe modèle les représentant). Vous pouvez effectuer une itération sur chacun d'entre eux et obtenir le join_date sur chacun d'eux, ou en l'indexant dans le tableau: aUser.user_in_groups [0] .join_date

Si vous voulez juste un tableau de dates de jointure ou quelque chose, je regarderais dans la méthode de collecte de Ruby.

Iteration:

aUser.users_in_groups.each do |group| 
    group.join_date 
end 
+0

Collect est presque ce que je cherche, merci! Une dernière chose - que se passe-t-il si j'ai unUser et unGroup et que je veux trouver la date de début de ces deux? –

+0

étant donné que usersingroups appartient aux deux modèles, vous pouvez appeler "users_in_groups" sur chacun d'entre eux, et obtenir un tableau de ces objets, qui auront tous un join_date. –

+0

Donc, trouvez UsersInGroups avec la contrainte ': user_id => aUser.id,: group_id => aGroup.id'? On dirait que ça fonctionne bien, merci :) –

Questions connexes