Самореферентный имеет много сквозных пользовательских внешних ключей в Rails

#ruby-on-rails #ruby

#ruby-on-rails #ruby

Вопрос:

У меня есть модель пользователя и таблица отношений, называемая ParentsChildren.

Я пытаюсь создать два отношения в пользовательской модели, чтобы User#children возвращать всех дочерних пользователей и User#parents возвращать всех родителей пользователей.

Мне уже удавалось заставить это работать раньше, но на этот раз я делаю что-то не так, и я не уверен, что именно.

 class ParentsChildren < ApplicationRecord
  self.table_name = 'parents_children'
  belongs_to :parent_user, class_name: 'User'
  belongs_to :child_user, class_name: 'User'
end

class User
  has_many :parent_relationships, class_name: 'ParentsChildren', foreign_key: :parent_user_id
  has_many :child_relationships, class_name: 'ParentsChildren', foreign_key: :child_user_id

  has_many :children, through: :parent_relationships, class_name: 'User', source: :child_user
  has_many :parents, through: :child_relationships, class_name: 'User', source: :parent_user
end

# => uninitialized constant ParentsChildren::ChildUser
  

Ответ №1:

Понял это. Ключ состоял в том, чтобы удалить ‘User’ в качестве имени класса для has_many :parents и has_many :users . Это выводится из приведенных источников.

 class User
  has_many :parent_relationships, foreign_key: :child_user_id,
           class_name: 'ParentsChildren'
  has_many :children, through: :parent_relationships,
           source: :parent_user
  has_many :child_relationships, foreign_key: :parent_user_id,
           class_name: 'ParentsChildren'
  has_many :parents, through: :child_relationships,
           source: :child_user
end