定义嵌套的 has_many 和 belongs_to

Define a nested has_many and belongs_to

假设我有 3 个模型,ABC(其中 A 有很多 BB有很多 C):

class A < ActiveRecord::Base
  has_many :bs
end

class B < ActiveRecord::Base
  belongs_to :a
  has_many :cs
end

class C < ActiveRecord::Base
  belongs_to :b
end

所以这里一切正常。使用 A.first.bs 我得到与 A 的第一个实例关联的 B 的所有实例,使用 C.last.b 我得到 B 的实例与 [=15 的最后一个实例关联=],等等

但是想要能够做到A.first.csC.last.a,我该怎么做呢?

我想这样做是因为我想能够做到 C.all.joins(:a) 因为我想绘制一些关于 C 实例的统计数据,按 A 分组].还有其他方法可以做到吗?

只需创建遍历树的 indirect associations

class A < ApplicationRecord
  has_many :bs
  has_many :cs, through: :bs
end

class B < ApplicationRecord
  belongs_to :a
  has_many :cs
end

class C < ApplicationRecord
  belongs_to :b
  has_one :a, through: :b
end

这会让你从任何一端出发:

A.first.cs
C.last.a 
# etc

A​​ctiveRecord会自动加入中间模型(B)。