Самореферентный запрос к базе данных ActiveRecord - PullRequest
0 голосов
/ 13 декабря 2018

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

Так выглядит модель

Pod.rb

has_many :pod_messages, foreign_key: "pod_slug", primary_key: "slug", dependent: :delete_all
has_many :pod_parents, class_name: "PodPod", dependent: :delete_all
has_many :parents, through: :pod_parents, :foreign_key => 'parent_id', :source => 'parent'
has_many :pod_children, class_name: "PodPod", :foreign_key => 'parent_id'
has_many :children, through: :pod_children, :source => 'pod'

PodMessage.rb

belongs_to :pod, foreign_key: "pod_slug", primary_key: "slug", counter_cache: true
belongs_to :author, class_name: "User", foreign_key: "user_id"

PodPod.rb

belongs_to :pod
belongs_to :parent, class_name: "Pod"

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

Я пыталсясделать это:

pod_messages = PodMessage.joins(:pod => :pod_pods).where(pod_pods: {parent_id: 7466}).references("pods")

Но я получаю: ActiveRecord :: ConfigurationError: Не могу присоединить 'Pod' к ассоциации с именем 'pod_pods';возможно, вы ошиблись?

И когда я попробую это:

pm = PodMessage.joins(:pod => :pod_parents).where(pod_parents: {parent_id: 7466}).references("pods")

я получу: ActiveRecord :: StatementInvalid: PG :: UndefinedTable: ERROR: отсутствует запись в предложении FROM для таблицы "pod_parents"LINE 1: ..._ pods" ON "pod_pods". "Pod_id" = "pods". "Id" WHERE "pod_paren ...

В идеале я мог бы получить следующее:

  • все pod_messages как на самом модуле, так и на дочерних модулях
  • все pod_messages на только дочерних модулях
  • все pod_messages, которые принадлежат определенному user_id (автору) для обоих модулей.сам и дочерние модули
  • все сообщения pod_messages, которые принадлежат определенному идентификатору пользователя (автора) для всех дочерних модулей
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...