Módulo: Mongoid::Traversable

Ampliado por:
ActiveSupport::Preocupación
Incluido en:
Componible
Definido en:
lib/mongoid/traversable.rb

Overview

Módulo mixin incluido en Mongoid::Document para proporcionar comportamiento alrededor de la navegación por el grafo de documentos.

Definido en el espacio de nombres

Modules: Métodos de clase, asignación de discriminador, recuperación de discriminador

Colapso delresumen del método de clase

Colapso del resumen del método de instancia

Detalles del método de clase

.__redefine(propietario, nombre, valor) ⇒ Objeto

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# Archivo 'lib/mongoid/traversable.rb', línea 17

def __redefine(propietario, Nombre, valor)
  Si propietario.¿clase singleton?
    propietario.método de redefinición(Nombre) { valor }
    propietario.Enviar(:public, Nombre)
  end
  propietario.redefinir_el_método_singleton(Nombre) { valor }
  propietario.clase singleton.Enviar(:public, Nombre)
  propietario.redefinir_el_método_singleton("#{nombre}=") hacer |nuevo_valor|
    Si propietario.¿igual?(yo)
      valor = nuevo_valor
    else
      ::Mongoid::Traversable.redefinir(yo, Nombre, nuevo_valor)
    end
  end
  propietario.clase singleton.Enviar(:public, "#{nombre}=")
end

Detalles del método de instancia

#_children(reset: false) ⇒ Array

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Obtener todos los niños Documents en este Document

Devuelve:

  • (Matriz)

    Todos los documentos secundarios de la jerarquía.



238
239
240
241
242
243
244
245
246
247
248
249
# Archivo 'lib/mongoid/traversable.rb', línea 238

def _niños(reiniciar: false)
  # Consulte la discusión anterior sobre el método `_parent`, en cuanto a por qué la variable
  # Aquí debe tener dos guiones bajos.
  #
  # rubocop:deshabilitar Nombre/Nombre de variable de instancia memorizado
  Si RESET
    @__children = nulo
  else
    @__children ||= recoger_niños
  end
  # rubocop:habilitar nombres/nombre de variable de instancia memorizado
end

#_descendientes(reinicio: falso) ⇒ Matriz

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Obtener todos los descendientes Documents de este Document recursivamente. Esto se utiliza al llamar a operaciones de persistencia de actualización desde el documento raíz, donde se deben determinar los cambios en todo el árbol. Tenga en cuenta que siempre se preferirá la persistencia desde los documentos incrustados, ya que son llamadas optimizadas. Esta operación puede resultar costosa en dominios con jerarquías grandes.

Devuelve:

  • (Matriz)

    Todos los documentos descendientes en la jerarquía.



261
262
263
264
265
266
267
268
269
270
271
272
# Archivo 'lib/mongoid/traversable.rb', línea 261

def _descendants(reiniciar: false)
  # Consulte la discusión anterior sobre el método `_parent`, en cuanto a por qué la variable
  # Aquí debe tener dos guiones bajos.
  #
  # rubocop:deshabilitar Nombre/Nombre de variable de instancia memorizado
  Si RESET
    @__descendants = nulo
  else
    @__descendants ||= recopilar_descendientes
  end
  # rubocop:habilitar nombres/nombre de variable de instancia memorizado
end

#_parentMongoid::Document | nil

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Recupera el documento padre de este documento.

Devuelve:



109
110
111
# Archivo 'lib/mongoid/traversable.rb', línea 109

def _padre
  @__padre || nulo
end

#_parent=(documento) ⇒ Objeto

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Establece el documento padre de este documento.

Parámetros:

  • Documento (Mongoide::Documento | nulo)

    el documento que se establecerá como documento padre.



121
122
123
# Archivo 'lib/mongoid/traversable.rb', línea 121

def _padre=(Documento)
  @__padre = Documento
end

#¡_reiniciar_descendientes_memoizados! ⇒ nulo

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Restablece los descendientes memorizados en el objeto. Se llama internamente cuando una matriz incrustada cambia de tamaño.

Devuelve:

  • (nil)

    nil.



388
389
390
391
392
# Archivo 'lib/mongoid/traversable.rb', línea 388

def _reset_memoized_descendants!
  _padre&._reset_memoized_descendants!
  _niños reiniciar: true
  _descendants reiniciar: true
end

#_rootDocument

Devuelve el documento raíz en el gráfico de objetos. Si el documento actual es el objeto raíz en el gráfico, devolverá "self".

Ejemplos:

Obtener el documento raíz en la jerarquía.

document._root

Devuelve:

  • (Documento) -

    El documento raíz en la jerarquía.



401
402
403
404
405
# Archivo 'lib/mongoid/traversable.rb', línea 401

def _root
  Objeto = yo
  Objeto = Objeto._padre mientras Objeto._padre
  Objeto
end

#_root?verdadero | falso

¿Es este documento el documento raíz de la jerarquía?

Ejemplos:

¿El documento es la raíz?

document._root?

Devuelve:

  • (verdadero | falso)

    Si el documento es la raíz.



413
414
415
# Archivo 'lib/mongoid/traversable.rb', línea 413

def _root?
  _padre ? false : true
end

#collect_childrenArray

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Recopila todos los hijos de este documento.

Devuelve:



279
280
281
282
283
284
285
286
287
288
# Archivo 'lib/mongoid/traversable.rb', línea 279

def recoger_niños
  [].grifo hacer |niños|
    relaciones incrustadas.each_pair hacer |Nombre, _asociación|
      sin_autoconstrucción hacer
        niño = Enviar(Nombre)
        niños.concat(Arreglo.envolver(niño)) Si niño
      end
    end
  end
end

#collect_descendantsArray

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Recopila todos los descendientes de este documento.

Devuelve:

  • (Matriz)

    Los descendientes.



295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
# Archivo 'lib/mongoid/traversable.rb', línea 295

def recopilar_descendientes
  niños = []
  para expandir = _niños
  expandido = {}

  hasta para expandir.¿vacío?
    en expansión = para expandir
    para expandir = []
    en expansión.cada hacer |niño|
      siguiente Si expandido[niño]

      # No marque como expandido si _id es nulo, ya que los documentos se comparan por
      # sus _ids, varios documentos incrustados con id nulos se compararán
      # igualmente, y algunos documentos no se expandirán.
      expandido[niño] = true Si niño._id
      niños << niño
      para expandir += niño._niños
    end
  end

  niños
end

#flag_descendants_persistedMatriz

Marca a todos los descendientes como persistentes.

Devuelve:

  • (Matriz)

    Los descendientes abanderados.



321
322
323
324
325
# Archivo 'lib/mongoid/traversable.rb', línea 321

def los descendientes de la bandera persistieron
  _descendants.cada hacer |niño|
    niño.nuevo_registro = false
  end
end

#hereditario?verdadero | falso

Determina si el documento es una subclase de otro documento.

Ejemplos:

Comprobar si el documento es una subclase

Square.new.hereditary?

Devuelve:

  • (verdadero | falso)

    Verdadero si es hereditario, falso si no.



333
334
335
# Archivo 'lib/mongoid/traversable.rb', línea 333

def ¿hereditario?
  yo.clase.¿hereditario?
end

#parentize(documento) ⇒ Documento

Establece una asociación entre elementos secundarios y primarios. Esto se utiliza para objetos recién creados, de modo que puedan agregarse correctamente al gráfico.

Ejemplos:

Configura el documento principal.

document.parentize(parent)

Parámetros:

  • Documento (Documento) -

    El documento padre.

Devuelve:



346
347
348
# Archivo 'lib/mongoid/traversable.rb', línea 346

def parentalizar(Documento)
  yo._padre = Documento
end

#remove_child(hijo) ⇒ Objeto

Eliminar un documento secundario de este documento principal. Si se incrusta uno, se establece en nulo; de lo contrario, se eliminan muchos de los documentos incrustados.

Esto se llama desde el comando de persistencia RemoveEmbedded.

Ejemplos:

Retire al niño.

document.remove_child(child)

Parámetros:

  • niño (Documento) -

    El documento secundario (incrustado) que se va a eliminar.



359
360
361
362
363
364
365
366
367
368
# Archivo 'lib/mongoid/traversable.rb', línea 359

def eliminar_hijo(niño)
  Nombre = niño.association_name
  Si niño.¿incrustado_uno?
    atributos.borrar(niño._asociación.store_as)
    eliminar_ivar(Nombre)
  else
    relación = Enviar(Nombre)
    relación._remove(niño)
  end
end

#reset_persisted_descendantsMatriz

Una vez que se persisten los descendientes, podemos llamar a esto para mover todos sus cambios y marcarlos como persistentes en una sola llamada.

Devuelve:

  • (Matriz)

    Los descendientes.



374
375
376
377
378
379
380
# Archivo 'lib/mongoid/traversable.rb', línea 374

def restablecer_descendientes_persistentes
  _descendants.cada hacer |niño|
    niño.mover_cambios
    niño.nuevo_registro = false
  end
  _reset_memoized_descendants!
end