Módulo: Mongoid::Association::EagerLoadable
- Definido em:
- lib/mongoid/association/eager_loadable.rb
Visão geral
Este módulo define o comportamento de carregamento ansioso para critérios.
Recolhimento do Resumo do método de instância
-
#hookid:: >Docs<Mongoid::Document>
Carregue as associações para os documentos fornecidos.
-
#concerns_loadable? ➤ verdadeiro | false
Indica se os critérios têm inclusões de associação que devem ser carregadas antecipadamente.
-
#preload(associations, Docs) ⇒ Object
Carregue as associações para os documentos fornecidos.
Detalhes do método de instância
#concerns_load(Docs) ➤ Array <Mongoid::Document>
Carregue as associações para os documentos fornecidos.
25 26 27 28 29 30 31 |
# File 'lib/mongoid/association/eager_loadable.rb', linha 25 def modified_load(Docs) Docs.toque fazer |d| se ans_loadable? pré-carregar(critério.inclusões, d) end end end |
#concerns_loadable? ➤ verdadeiro | false
Indica se os critérios têm inclusões de associação que devem ser carregadas antecipadamente.
16 17 18 |
# File 'lib/mongoid/association/eager_loadable.rb', linha 16 def ans_loadable? !critério.inclusões.vazio? end |
#preload(associations, Docs) ⇒ Object
Carregue as associações para os documentos fornecidos. Isso será feito recursivamente para carregar as associações dos documentos associados dos documentos fornecidos.
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/mongoid/association/eager_loadable.rb', linha 40 def pré-carregar(Associações, Docs) assoc_map = Associações.group_by(&:inverse_class_name) docs_map = {} fila = [ classe.to_s ] enquanto classe = fila.mudança se como = assoc_map.excluir(classe) como.cada fazer |assoc| fila << assoc.class_name # Se esta classe estiver aninhada na árvore de inclusão, carregue apenas documentos # para a associação acima dela. Se não houver associação de pais, # incluiremos documentos dos documentos passados para esse método. ds = Docs se assoc.parent_incluses.Tamanho > 0 ds = assoc.parent_incluses.map{ |p| docs_map[p].to_a }.achatar end res = assoc.relação.ans_loader([assoc], ds).EXECUTAR docs_map[assoc.name] ||= [].to_set docs_map[assoc.name].mesclar(res) end end end end |