Ruby on rails 有没有办法处理双重多对多关系?

Ruby on rails 有没有办法处理双重多对多关系?,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我在福、巴和佐克之间有关系 Zork和Foo是相关的,但为了便于使用,它们由与“Bar”的关系来管理,从而创建多对多对多的关系 即。每个酒吧都有很多食物,每个食物都可以有很多酒吧。每个条可以分配给多个Zork,每个Zork可以分配给多个条。所以Foo-HABTM-Bar和Bar-HABTM-Zork active record是否支持这种类型的关系?我不得不手工编写一个查询来处理正确的连接,以获得属于Zork的Foo,但结果有点脆弱。例如,查询的'distcint id'部分会在任何时候被删除。

我在福、巴和佐克之间有关系

Zork和Foo是相关的,但为了便于使用,它们由与“Bar”的关系来管理,从而创建多对多对多的关系

即。每个酒吧都有很多食物,每个食物都可以有很多酒吧。每个条可以分配给多个Zork,每个Zork可以分配给多个条。所以Foo-HABTM-Bar和Bar-HABTM-Zork


active record是否支持这种类型的关系?我不得不手工编写一个查询来处理正确的连接,以获得属于Zork的Foo,但结果有点脆弱。例如,查询的'distcint id'部分会在任何时候被删除。计算结果,这是次优的。我可以通过使用countDistinct id来解决这个问题,但这感觉像是对根本问题的笨拙修复——它破坏了我用来规范分页代码的各种帮助方法。

听起来你可能在寻找has\u many:through关系? 从文档中:

has\u many:through关联对于通过嵌套has\u many关联设置快捷方式也很有用。例如,如果一个文档有许多节,而一个节有许多段落,您有时可能希望获得文档中所有段落的简单集合。您可以这样设置:


你真的是说一个潜伏者吗?差不多了,它被锁住了。它们之间有3个模型和2个HABTM链接,因此,模型通过2个额外的表进行链接:总共5个DB表。我最初可能表面上认为是Foo HABTM Bar和Bar HABTM Zork。在这里,当你讨论食物和酒吧时,你所说的词语选择是否有很多,但当你提到佐克和酒吧时,你所说的“指定的很多”在功能上意味着一些特定的东西?为了便于使用,您提到暗示您需要某些功能。也许您可以详细说明您最终希望高效执行的数据访问方式。@Lowerer我可能应该说我有许多Foo对象,它们以HABTM关系收集到包中,而不是“Foo”、“Bar”和“Zork”。然后,可以在另一个HABTM关系中为每个Zork对象分配一个或多个包。我想知道一个给定的Zork对象通过double-HABTM关系连接了哪些Foo对象。通过许多Foo对象,你是指许多不同的ActiveRecord类,它们以某种方式相互关联?我想回顾一下这个问题,Foo、Bar和Zork的真实本质还没有被揭示出来HABTM和HMT之间没有太多的语义差异。虽然这可以通过使用额外的HABTM关系来解决,主要像其他两个连接的缓存一样,但在最坏的情况下,它很容易变成现有连接表a和b的巨大规模:a*b。不,这更像是查询现有数据,一个HABTM通过另一个HABTM。如果:through关系本身是多对多HABTM,则查询可能同时具有多个联接。has_many:through无法正常工作。
class Document < ActiveRecord::Base
  has_many :sections
  has_many :paragraphs, through: :sections
end

class Section < ActiveRecord::Base
  belongs_to :document
  has_many :paragraphs
end

class Paragraph < ActiveRecord::Base
  belongs_to :section
end
@document.paragraphs