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

时间:2014-08-26 00:27:46

标签: ruby-on-rails activerecord

我和Foo,Bar和Zork之间有关系。

Zork和Foo是相关的,但为了便于使用,他们通过与Bar' Bar'相反,创建一个多对多的关系。

(即每个酒吧都有很多Foos,每个Foo可以有很多酒吧。每个酒吧都可以分配给很多Zorks,每个Zork可以分配很多酒吧。所以Foo HABTM酒吧和酒吧HABTM Zork)

活跃记录是否支持此类关系?我不得不亲自编写一个查询来处理让Foo属于Zork所需的右连接,但结果有点脆弱。例如,' distcint id'当你.count结果时,查询的一部分会被删除,这是次优的。我可以通过使用count(" Distinct id")来解决这个问题,但这对于潜在的问题感觉就像是一个笨拙的解决方案 - 它打破了我用来规范化我的代码以进行分页的各种辅助方法。 / p>

1 个答案:

答案 0 :(得分:0)

听起来你可能正在寻找has_many:through关系? 来自文档:http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association

  

has_many:through关联对于通过嵌套的has_many关联设置“快捷方式”也很有用。例如,如果文档有许多部分,并且部分有许多段落,您有时可能希望获得文档中所有段落的简单集合。你可以这样设置:

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
  

通过:::指定的部分,Rails现在将理解:

@document.paragraphs