ruby 如何在mongoid中嵌套急切加载?

wj8zmpe1  于 2022-11-04  发布在  Ruby
关注(0)|答案(2)|浏览(121)
Class Band
  include Mongoid::Document
  has_many :albums
end

Class Album
  include Mongoid::Document
  has_many :musics
  belongs_to :band
end

Class Music
  include Mongoid::Document
  belongs_to :album
end

当我这样做的时候,@乐队=乐队.包括(专辑:[:音乐])
专辑已成功包含。音乐未包含。项目符号表示“避免检测到急切加载Band=〉[:musics]”我如何包含音乐?

pftdvrlh

pftdvrlh1#

根据这个blog
尽管Mongoid提供了即时的加载支持,但它有一些限制:

  • 无嵌套:只能立即装入直接关系。
  • 无多态性:不能包括多态关系。
  • 仅标准:只有Mongoid::Criteria对象才能使用提前加载。

还有solution

cld4siwp

cld4siwp2#

好吧,Mongoid〉= 8.0已经支持嵌套包含原生!️

  • 语法
Voucher.includes(:created_by, booking: [:unit])
  • 课程
class User
  include Mongoid::Document
end

class Unit
  include Mongoid::Document
end

class Booking
  include Mongoid::Document
  belongs_to :unit
  has_many :vouchers
end

class Voucher
  include Mongoid::Document
  belongs_to :booking
  belongs_to :created_by, class_name: 'User'
end

新的nested include显示为this ticket的解决方案。
因此,如果Mongoid版本〉= 8.0,就不需要使用mongoid_includes gem。

相关问题