定义嵌套的 has_many 和 belongs_to
Define a nested has_many and belongs_to
假设我有 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
我得到 B
的实例与 [=15 的最后一个实例关联=],等等
但是想要能够做到A.first.cs
和C.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
ActiveRecord会自动加入中间模型(B)。
假设我有 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
我得到 B
的实例与 [=15 的最后一个实例关联=],等等
但是想要能够做到A.first.cs
和C.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
ActiveRecord会自动加入中间模型(B)。