蒙古人 - 让孩子的孩子

时间:2013-09-22 20:39:01

标签: ruby-on-rails mongoid

我们假设我有grandparent个文档,其中包含许多parents,每个parent都有children个。

在使用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

1 个答案:

答案 0 :(得分:0)

像这样的方法,它会在调用后加载children作为属性。

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

请同时查看此SO answer