ActiveRecord自参照数据库查询挑战

时间:2018-12-13 20:04:34

标签: ruby-on-rails activerecord

我有一个称为pods的模型,其中包含许多pod消息。它也可以有很多豆荚。因此,容器可以是其他具有容器消息的容器的容器。每个pod消息都属于一个作者。

这是模型的样子

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,我需要能够找到属于该pod的任何子pod的所有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:错误:缺少表“ pod_parents”的FROM子句条目 第1行:..._ pods“在” pod_pods“上。” pod_id“ =” pods“。” id“在” pod_paren ...

理想情况下,我将能够获得以下信息:

  • 整个pod本身和子pod的所有pod_messages
  • 子吊舱中的所有pod_messages
  • 在广告连播本身和子广告连播中属于特定user_id(作者)的所有pod_messages
  • 在子Pod中属于特定user_id(作者)的所有pod_messages

0 个答案:

没有答案