假设我有 3 个模型,A、B 和 C:
class A
include Mongoid::Document
has_many :bs
...
class B
include Mongoid::Document
belongs_to :a
has_many :cs
...
class C
include Mongoid::Document
belongs_to :B
...
从版本 6 开始,mongoid 似乎不支持复杂的急切加载。是否可以只运行我的 3 个查询来获取所有 As、B 和 C,并手动覆盖关联。像这样的东西:
a = A.(#some criteria).first
bs = B.where(a_id: a.id).group_by{|x| x.id}
cs = C.where(:b_id.in => bs.values.collect{|x| x.id}).group_by{|x| x.b_id}
a.bs = bs
bs.values.each do |k,v|
v.a = a
v.cs = cs[k]
end
cs.each do |k,v|
v.b = bs[v.b_id]
end
这似乎工作得很好,但是当你访问 a.bs 和 b.cs 等时,它会触发大量查询,所以它显然不能在 mongoid 级别工作。有没有办法手动覆盖关联,以便我可以运行查询并手动组装它们?
基本上,我想做类似这篇文章描述的事情,但使用 mongoid(和 Rails 5):
感谢您的帮助,凯文