2013-09-22 2 views
2

Предположим, у меня есть документ grandparent со многими parents, и у каждого parent есть много children.Mongoid - Get Children of Children

Каков наилучший способ, в Rails с Mongoid, получить все 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 
+0

'Best' должна быть определена с точки зрения вашей цели. Вы оптимизируете производительность, читаемость, модульность или что конкретно? – Mustafa

+0

@Mustafa производительности. – Baub

ответ

0

метод, как это было бы загрузить children как атрибут когда-то называли.

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

Посмотрите этот SO answer, а

+0

Это возвращает nil: 'children = Child.where (: parent_id.in => parents.map (&: id))', но пример цикла в моем вопросе работает. – Baub

+0

@James это поможет, если вы разместите файлы модели, показывающие, как определяются ассоциации. – tihom

+0

@tihorn добавлен в исходный вопрос. – Baub

Смежные вопросы