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
-
#eager_load(docs) ⇒ Array<Mongoid::Document>
Cargar las asociaciones para los documentos dados.
-
#¿ansioso_cargable? ⇒ verdadero | falso
Indica si el criterio tiene inclusiones de asociación que deben cargarse con anticipación.
-
#precarga(asociaciones, documentos) ⇒ Objeto
Cargar las asociaciones para los documentos dados.
Detalles del método de instancia
#eager_load(docs) ⇒ Array
Cargar las asociaciones para los documentos dados.
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.
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.
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 |