Módulo: Mongoid::Association::EagerLoadable

Incluido en:
Contextual::Memoria, Contextual::Mongo, Contextual::Mongo::Cargador de documentos
Definido en:
lib/mongoid/asociación/eager_loadable.rb

Overview

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

Colapso del resumen del método de instancia

Detalles del método de instancia

#eager_load(docs) ⇒ Array

Cargar las asociaciones para los documentos dados.

Parámetros:

  • docs (Matriz)

    Los documentos.

Devuelve:

  • (Matriz)

    Los documentos proporcionados.



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

def carga ansiosa(docs)
  docs.grifo hacer |d|
    Si ¿ansioso_cargable?
      precarga(criterios.inclusiones, d)
    end
  end
end

#¿ansioso_cargable?verdadero | falso

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

Devuelve:

  • (verdadero | falso)

    Indica si se utiliza la carga previa.



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

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

#precarga(asociaciones, documentos) ⇒ Objeto

Cargar las asociaciones de los documentos dados. Esto se realizará recursivamente para cargar las asociaciones de los documentos asociados a los documentos dados.

Parámetros:

  • asociaciones (Matriz)

    Las asociaciones a cargar.

  • docs (Matriz)

    Los documentos.



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(Y:nombre_de_clase_inversa)
  docs_map = {}
  queue = [ klass.a_s ]

  # cuenta para herencia de colección única
  queue.Push(klass.clase raíz.a_s) Si klass != klass.clase raíz

  mientras klass = queue.cambio
    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 cargue 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.inclusiones parentales.longitud > 0
          ds = assoc.inclusiones parentales.map{ |p| docs_map[p].to_a }.aplanar
        end

        res = assoc.relación.cargador ansioso([assoc], ds).ejecutar

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