假设我有3个模型,A
,B
和C
(其中A
有很多B
,而B
有很多模型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
我得到了与{{1 }}等
但是希望能够做B
和C
,我该怎么做?
我想这样做是因为我希望能够做A.first.cs
,因为我想绘制一些关于C.last.a
实例的统计信息,这些统计信息按C.all.joins(:a)
分组。还有另一种方法可以做到这一点吗?
答案 0 :(得分:2)
只需创建遍历树的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
ActiveRecord将自动加入中间模型(B)。