Неинициализированная константная ошибка: не может получить это has_many: через правильный - PullRequest
2 голосов
/ 18 октября 2011

Я был вокруг и вокруг с этим.Я видел подобные вопросы здесь, но, кажется, у меня есть дополнительный усложняющий фактор;то, что сработало для них, не работает для меня.

У меня есть модели и таблицы для User, Group, GroupMember.Группа принадлежит пользователю, но каждая группа может иметь произвольное количество членов группы, то есть других пользователей.Вот мои ассоциации:

В User,

has_many :groups

В группе,

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

В GroupMember,

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

Чтобы попасть начлены группы, то в groups_controller.rb я делаю это:

@groupmembers = @group.group_members.all

Однако, это приводит к следующей ошибке:

NameError in GroupsController#show 
uninitialized constant Group::GroupMember

Как я уже говорил, я был вокруги вокруг с этим ... где я ошибся?Заранее спасибо за просмотр ...

Ответы [ 3 ]

2 голосов
/ 01 ноября 2011

Я, наконец, получил эту работу самостоятельно.Часть, которую я пропустил, была в классе User;Поскольку User является базовым классом Member, мне нужно это:

belongs_to :groupmember, :foreign_key=>"member_id"

Как только это было сделано, Rails смог найти все, как и должно, например,

Group.find(1).members теперь находит всех пользователей, принадлежащих к группе с идентификатором 1.

1 голос
/ 23 февраля 2013

Иногда это также может быть так просто, как belongs_to :model должен быть единственным, а не множественным. Я сделал эту ошибку в моих отношениях сегодня.

1 голос
/ 25 октября 2011

Предполагая, что у вас есть модель под названием GroupMembers (которую вы должны указать, что это ассоциация has_many), ваша непостоянная ассоциация должна выглядеть следующим образом как для моделей Group, так и для моделей Member:

has_many: group_members,: class_name => "GroupMembers"

По какой-то причине рельсы не плюрализуют вторую модель в ассоциации, поэтому просто сделайте это сами.

...