Módulo: Mongoid::Association::EagerLoadable

Incluído em:
Contextual::Memory, Contextual::Mongo, Contextual::Mongo::DocumentsLoader
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

Detalhes do método de instância

#concerns_load(Docs) ➤ Array <Mongoid::Document>

Carregue as associações para os documentos fornecidos.

Parâmetros:

Retorna:



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.

Retorna:

  • (verdadeiro | falso)

    Se deve ser carregado com impaciência.



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.

Parâmetros:



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