Módulo: Mongoid::Association::EagerLoadable
- 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
-
#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.
-
#preload(asociaciones, docs) ⇒ objeto
Cargar las asociaciones para los documentos dados.
Detalles del método de instancia
#eager_load(docs) ⇒ arreglo<Mongoid::documento>
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 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.
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.
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 |