2

假设我有一个包含 many 的文档,并且每个grandparent文档都有很多.parentsparentchildren

在带有 Mongoid 的 Rails 中,在不循环的情况下获取所有children特定内容的最佳方法是什么?grandparent

例如,如果我要使用循环,它看起来像这样(粗略的代码):

  def children
    children = []
    parents.each do |p|
      p.children.each do |c|
        children << c
      end
    end
    children.uniq
  end

class Grandparent
  include Mongoid::Document
  has_many :parents
end

class Parent
  include Mongoid::Document
  belongs_to :grandparent
  has_many :children
end

class Child
  include Mongoid::Document
  belongs_to :parent
end
4

1 回答 1

0

像这样的方法,一旦被调用,它将children作为属性加载。

def children(reload=false)
   @children = nil if reload
   @children ||= Child.where(:parent_id.in =>  parents.map(&:id))
end

也请参阅此 SO答案

于 2013-09-22T21:06:02.947 回答