@Absolutely_Noob

Как правильно настроить связь habtm?

Доброго времени суток
У меня есть две модели, Group и User
class Group < ActiveRecord::Base
     has_and_belongs_to_many :users
end

class User < ActiveRecord::Base
     has_and_belongs_to_many :groups
end

Миграция
#rails g migration CreateJoinTableGroupsUsers groups users

class CreateJoinTableGroupsUsers < ActiveRecord::Migration
  def change
    create_join_table :groups, :users, id: false do |t|
      # t.index [:group_id, :user_id]
      # t.index [:user_id, :group_id]
    end
  end
end

Эта миграция создает следующую таблицу:
create_table "groups_users", id: false, force: true do |t|
    t.integer "group_id", null: false
    t.integer "user_id",  null: false
  end


Суть проблемы: после создания новой группы я могу посмотреть всех юзеров внутри нее, но не могу совершить обратный процесс
Group.find(id).users #=> #<ActiveRecord::Associations::CollectionProxy [...users...]> 
User.find(id).groups #=> nil

По идее, должно работать в обе стороны? Как правильно это сделать?
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
@Absolutely_Noob Автор вопроса
Закрываю вопрос, я заменил в модели User
has_and_belongs_to_many :groups
на
has_and_belongs_to_many :user_groups, class_name: 'Group'

И теперь все работает должным образом:
User.find(id).user_groups #=> #<ActiveRecord::Associations::CollectionProxy [...groups...]>

Проблема решена.
Возможно конфликтовало из-за самого слова groups, потому что есть вот это https://apidock.com/rails/Rails/groups/class, но я не уверен на 100%
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы