J'ai deux tables, utilisateurs et groupes. Un utilisateur peut appartenir à plusieurs groupes. Un groupe peut avoir plusieurs utilisateurs.Can Rails Active Record comprend deux relations simultanées entre deux tables à la fois?
J'ai donc créé un have_and_belongs_to_many relation entre les utilisateurs et les groupes à l'aide d'une table de jointure, groups_users. Tout cela fonctionne comme prévu.
Ce que je voudrais également faire est de spécifier un groupe ACTIVE pour chaque utilisateur. Si ce n'était la relation HABTM je l'ai déjà défini, je créerais une colonne « group_id » utilisateurs pour le groupe actif, puis je définirais un à plusieurs entre les modèles suivants:
class User < ActiveRecord::Base
belongs_to :group
end
class Group < ActiveRecord::Base
has_many :users
end
Cela n'a pas fonctionné. Je n'ai pas pu accéder aux propriétés de groupe telles que "@ user.group.name". Je soupçonne que je demande trop de Rails en spécifiant deux relations.
J'ai donc trois questions.
- Je pourrais très facilement comprendre si la combinaison des deux relations confond Active Record. Est-ce le cas?
- Si oui, comment implémenteriez-vous ces relations? En ce moment, je n'utilise que le group_id manuellement, mais cela me semble désordonné.
- Que j'utilise la magie Active Record ou que vous définissiez manuellement le groupe actif, il est possible que le groupe actif d'un utilisateur soit en dehors du groupe auquel il appartient en utilisant la première relation habtm. Des réflexions sur comment implémenter ceci avec la contrainte que le groupe actif doit être un groupe auquel appartient l'utilisateur?
Merci pour toute idée. Je suis dans la courbe d'apprentissage de Rails depuis quelques semaines et je pense que le fait d'aller au fond de ce petit problème approfondira ma compréhension des modèles et des relations de table.
Remerciements. Les choses fonctionnent maintenant, donc je pense que j'ai eu un autre bug quelque part. J'ai pris votre approche de renommer l'association (primary_group) pour rendre les choses plus claires. – Greg