Rails: Why “has_many …, :through => …” association

2020-06-01 08:49发布

问题:

To express that a group can have multiple users, and a user can belong to multiple groups, I set the following associations:

class Group < ActiveRecord::Base
  has_many :users_groups
  has_many :users, :through => :users_groups
end

class User < ActiveRecord::Base
  has_many :users_groups
  has_many :groups, :through => :users_groups
end

class UsersGroups < ActiveRecord::Base
  belongs_to :user
  belongs_to :group
end

However, when I type:

Group.find(1).users

I get:

NameError: uninitialized constant Group::UsersGroup

What am I doing wrong ?

回答1:

class UsersGroups should be class UsersGroup. ActiveRecord models are singular - the tables are plural.



回答2:

ActiveRecord tries to singularize the name, but your class is actually named UserGroups. Rename it to UserGroup. The models are singular.



回答3:

i think change name of class UserGroups to UserGroup



回答4:

In addition, please note that the filename of the model must also be in the singular form. In this case, app/models/user_group.rb