2 votes

Erreur de constante non initialisée : Impossible d'obtenir ce has_many :through correct

J'ai fait le tour de la question. J'ai vu des questions similaires ici, mais il semble que j'aie un facteur de complication supplémentaire : ce qui a fonctionné pour eux ne fonctionne pas pour moi.

J'ai des modèles et des tables pour User, Group, GroupMember. Un groupe appartient à un utilisateur, mais chaque groupe peut avoir un nombre arbitraire de membres, c'est-à-dire d'autres utilisateurs. Voici mes associations :

En utilisateur,

has_many :groups

Dans le groupe,

belongs_to :user
has_many :group_members 
has_many :members, :class_name => "User", :through=>:group_members

Dans GroupMember,

belongs_to :member, :class_name=>"User"  
belongs_to :group

Pour obtenir les membres d'un groupe, alors, dans groups_controller.rb je fais ceci :

@groupmembers = @group.group_members.all

Cependant, cela génère l'erreur suivante :

NameError in GroupsController#show 
uninitialized constant Group::GroupMember

Comme je l'ai dit, j'ai fait le tour de la question... Où me suis-je trompé ? Merci d'avance pour votre aide...

2voto

David Points 78

J'ai finalement réussi à le faire fonctionner tout seul. La partie qui me manquait était dans la classe User ; puisque User est la classe sous-jacente de Member, j'avais besoin de ceci :

belongs_to :groupmember, :foreign_key=>"member_id"

Une fois que cela a été mis en place, Rails a été en mesure de tout trouver comme il le devait, par exemple

Group.find(1).members trouve maintenant tous les utilisateurs qui appartiennent au groupe avec un ID de 1.

1voto

dsent Points 11

En supposant que vous ayez un modèle appelé GroupMembers (ce qui devrait être le cas puisqu'il s'agit d'une association traversante has_many), votre association non traversante devrait ressembler à ceci sur les modèles Group et Member :

has_many :group_members, :class_name => "GroupMembers"

Pour une raison quelconque, les rails ne mettent pas le deuxième modèle au pluriel dans l'association, alors faites-le vous-même.

1voto

7hunderbird Points 51

Parfois, il peut aussi être aussi simple que le belongs_to :model doit être au singulier et non au pluriel. J'ai fait cette erreur sur ma relation aujourd'hui.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X