dan
dan

Reputation: 1080

has_many, through - undefined method `relation_delegate_class'

I have a Users class, and a UserGroup class:

class User < ActiveRecord::Base
  has_many :group_memberships
  has_many :users_groups, through: :group_memberships

  ...

class UsersGroup < ActiveRecord::Base
  has_many :group_memberships
  has_many :users, through: :group_memberships

... and a GroupMembership class to join them -

class GroupMembership < ActiveRecord::Base
  belongs_to :users, dependent: :destroy
  belongs_to :users_groups, dependent: :destroy

My migrations look like this -

class CreateUsersGroups < ActiveRecord::Migration
  def change
    create_table :users_groups do |t|
     t.string :title
     t.string :status
     t.string :about

     t.timestamps null: false
    end
  end
end

class CreateGroupMembership < ActiveRecord::Migration
  def change
    create_table :group_memberships do |t|
      t.integer :user_id, index: true
      t.integer :users_group_id, index: true
      t.boolean :owner
    end
  end
end

So user.group_memberships is perfectly happy, but user.users_groups returns an error -

undefined method `relation_delegate_class' for Users:Module

Similarly, users_group.group_memberships is fine, but users_group.users returns exactly the same error -

undefined method `relation_delegate_class' for Users:Module

... on the users module. I've stared at this for a couple of hours, but I'm sure it's simple syntax somewhere. What's the problem?

Upvotes: 1

Views: 1427

Answers (2)

JSteEd
JSteEd

Reputation: 11

I believe that since you are using 'through' you will have to use:

user.group_memberships.users_groups

This is because users does not have users_groups or vice versa.

Instead you access the users_groups through group_memberships.

Upvotes: -1

Roko
Roko

Reputation: 1325

When using belongs_to I believe you need to use a singular format: So not belongs_to :users but belongs_to :user

class GroupMembership < ActiveRecord::Base
  belongs_to :user, dependent: :destroy
  belongs_to :writers_group, dependent: :destroy 

Upvotes: 4

Related Questions