Módulo: Mongoid::Association::EagerLoadable

Incluido en:
Contextual::Memory, Contextual::Mongo, Contextual::Mongo::DocumentsLoader
Definido en:
lib/mongoid/association/eager_loadable.rb

Overview

Este módulo define el comportamiento de carga avanzada para los criterios.

Resumen del método de instancia colapsar

Detalles del método de instancia

#eager_load(docs) ⇒ arreglo<Mongoid::documento>

Cargar las asociaciones para los documentos dados.

Parámetros:

Devuelve:



25
26
27
28
29
30
31
# Archivo 'lib/mongoid/association/eager_loadable.rb', línea 25

def eager_load(docs)
  docs.tocar hacer |d|
    si eager_loadable?
      precarga(criterios.inclusiones, d)
    end
  end
end

#eager_loadable?true | false

Indica si el criterio tiene inclusiones de asociación que deben cargarse con anticipación.

Devuelve:

  • (true | false)

    Indica si se utiliza la carga previa.



16
17
18
# Archivo 'lib/mongoid/association/eager_loadable.rb', línea 16

def eager_loadable?
  !criterios.inclusiones.¿vacío?
end

#preload(asociaciones, Docs) ⇒ Objeto

Carga las asociaciones para los documentos proporcionados. Esto se hará de manera recursiva para cargar las asociaciones de los documentos asociados de los documentos proporcionados.

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
66
67
68
# Archivo 'lib/mongoid/association/eager_loadable.rb', línea 40

def precarga(asociaciones, docs)
  assoc_map = asociaciones.agrupar por(Ynombre_de_clase_inversa)
  docs_map = {}
  queue = [ klass.to_s ]

  # tener en cuenta la herencia de una colección única
  queue.push(klass.root_class.to_s) si klass != klass.root_class

  mientras klass = queue.turno
    si como = assoc_map.borrar(klass)
      como.cada hacer |assoc|
        queue << assoc.nombre_de_clase

        # Si esta clase está anidada en el árbol de inclusión, solo cargar documentos
        # para la asociación superior. Si no hay asociación principal,
        # incluiremos documentos de los documentos pasados a este método.
        ds = docs
        si assoc.parent_inclusions.longitud > 0
          ds = assoc.parent_inclusions.map{ |p| docs_map[p].to_a }.nivelar
        end

        res = assoc.relación.eager_loader([assoc], ds).Ejecutar

        docs_map[assoc.Nombre] ||= [].to_set
        docs_map[assoc.Nombre].fusionar(res)
      end
    end
  end
end