Question

I have been around and around with this. Have seen similar questions here but it seems I have an extra complicating factor; what worked for them doesn't work for me.

I have models and tables for User, Group, GroupMember. A group is owned by a user, but each group can have an arbitrary number of group members, i.e., other users. Here are my associations:

In User,

has_many :groups

In Group,

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

In GroupMember,

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

To get at the members of a group, then, in groups_controller.rb I do this:

@groupmembers = @group.group_members.all

However, that generates the following error:

NameError in GroupsController#show 
uninitialized constant Group::GroupMember

Like I say, I have been around and around with this... where have I gone wrong? Thanks in advance for looking...

Was it helpful?

Solution

I finally got this working on my own. The part I was missing was in the User class; since User is the underlying class of Member, I needed this:

belongs_to :groupmember, :foreign_key=>"member_id"

Once that was in place, Rails was able to find everything as it should, e.g,

Group.find(1).members now finds all users who belong to the group with an ID of 1.

OTHER TIPS

Assuming you have a model called GroupMembers (which you should given this is a has_many through association), your non-through association should look like this on both the Group and Member models:

has_many :group_members, :class_name => "GroupMembers"

For some reason rails isn't pluralizing the second model in the association, so just do it yourself.

Sometimes it can also be as simple as the belongs_to :model needs to be singular instead of plural. I made this mistake on my relationship today.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top