获得所有记录两个`has_many,through`关系

时间:2014-01-06 23:24:01

标签: ruby-on-rails activerecord ruby-on-rails-4

我有几个型号

class AAA < ActiveRecord::Base
  has_many :bbbs, through: :some_other_model
end

class BBB < ActiveRecord::Base
  has_many :cccs, through: :yet_another_model
end

假设我有一个AAA实例的引用,如何在不使用CCCs之类的低效模式的情况下获取所有a.bbbs.map { |x| x.cccs }的平面列表?

1 个答案:

答案 0 :(得分:2)

从RoR 3.1开始,您可以嵌套has_many :through个关联。

来自3.1 release notes

  

与a:through选项的关联现在可以使用任何关联作为   通过或源联系,包括其他有关联的协会   a:通过选项和has_and_belongs_to_many关联。

在你的例子中:

class AAA < ActiveRecord::Base
  has_many :bbbs, through: :some_other_model
  has_many :cccs, through: :bbbs
end

AAA.first.cccs # => [ccc1, ccc2, ...]