Rails: Почему ассоциация has_many...,: through =>... "приводит к" NameError: uninitialized constant... "

Чтобы выразить, что группа может иметь несколько пользователей, а пользователь может принадлежать нескольким группам, я устанавливаю следующие ассоциации:

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

Однако, когда я печатаю:

Group.find(1).users

Я получаю:

NameError: uninitialized constant Group::UsersGroup

Что я делаю неправильно?

Ответы

Ответ 1

class UsersGroups должен быть class UsersGroup. Модели ActiveRecord являются единственными - таблицы являются множественными.

Ответ 2

ActiveRecord пытается развить имя, но ваш класс на самом деле называется UserGroups. Переименуйте его в UserGroup. Модели сингулярны.

Ответ 3

Я думаю, что измените имя класса UserGroups на UserGroup

Ответ 4

Кроме того, обратите внимание, что имя файла модели также должно быть в единственной форме. В этом случае app/models/user_group.rb