Search code examples
activerecordruby-on-rails-3.1model-associationsnameerror

Uninitialized constant error: Can't get this has_many :through correct


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...


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.