Módulo: Mongoid::Traversable

Ampliado por:
ActiveSupport::Concern
Incluido en:
Compuesto
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 bajo Namespace

Modules: ClassMethods, DiscriminatorAssignment, DiscriminatorRetrieval

Resumen del método de clase colapsar

Resumen del método de instancia colapsar

Detalles del método de clase

.__redefine(propietario, nombre, valor) ⇒ objeto

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.



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

def __redefine(propietario, Nombre, Valor)
  si propietario.singleton_class?
    propietario.redefine_method(Nombre) { Valor }
    propietario.enviar(:public, Nombre)
  end
  propietario.redefine_singleton_method(Nombre) { Valor }
  propietario.singleton_class.enviar(:public, Nombre)
  propietario.redefine_singleton_method("#{name}=") hacer |nuevo valor|
    si propietario.¿igual?(sí mismo)
      Valor = nuevo valor
    else
      ::Mongoid::Traversable.redefinir(sí mismo, Nombre, nuevo valor)
    end
  end
  propietario.singleton_class.enviar(:public, "#{name}=")
end

Detalles del método de instancia

#_children(reset: false) ⇒ arreglo<Documento>

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Obtén todos los elementos secundarios Documents de este Document

Devuelve:

  • (Array<documento>)

    Todos los documentos secundarios en la jerarquía.



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

def _children(restablecer: false)
  # Consulte la discusión anterior sobre el método `_parent`, en cuanto a por qué la variable
  # aquí debe haber dos guiones bajos.
  #
  # rubocop:disable Naming/MemoizedInstanceVariableName
  si restablecer
    @__children = nulo
  else
    @__children ||= recoger_niños
  end
  # rubocop:enable Naming/MemoizedInstanceVariableName
end

#_descendants(reset: false) ⇒ arreglo<documento>

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Get todos los descendientes de Documents de este Document de forma recursiva. Esto se utiliza al llamar operaciones de persistencia de actualización desde el root document, 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:

  • (Array<documento>)

    Todos los documentos descendientes en la jerarquía.



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

def _descendants(restablecer: false)
  # Consulte la discusión anterior sobre el método `_parent`, en cuanto a por qué la variable
  # aquí debe haber dos guiones bajos.
  #
  # rubocop:disable Naming/MemoizedInstanceVariableName
  si restablecer
    @__descendants = nulo
  else
    @__descendants ||= collect_descendants
  end
  # rubocop:enable Naming/MemoizedInstanceVariableName
end

#_parentMongoid::Document | nil

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Recupera el documento principal de este documento.

Devuelve:



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

def _parent
  @__parent || nulo
end

#_parent=(documento) ⇒ Objeto

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Establece el documento padre de este documento.

Parámetros:

  • Documento (Mongoid::Document | nil)

    el documento que se establecerá como el documento principal.



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

def _parent=(Documento)
  @__parent = Documento
end

#_reset_memoized_descendants!nil

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Restaura los descendientes memorizados en el objeto. Se llama internamente cuando un arreglo incrustado cambia de tamaño.

Devuelve:

  • (nil)

    nil.



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

def _reset_memoized_descendants!
  _parent&._reset_memoized_descendants!
  _children restablecer: true
  _descendants restablecer: true
end

#_rootDocument

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

Ejemplos:

Obtén el documento raíz en la jerarquía.

document._root

Devuelve:

  • (documento)

    El documento raíz en la jerarquía.



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

def _root
  Objeto = sí mismo
  Objeto = Objeto._parent mientras Objeto._parent
  Objeto
end

#_root?true | false

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

Ejemplos:

¿Es el documento la raíz?

document._root?

Devuelve:

  • (true | false)

    Si el documento es la raíz.



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

def _root?
  _parent ? false : true
end

#collect_childrenarreglo<Documento>

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Recopile todos los subdocumentos de este documento.

Devuelve:

  • (Array<documento>)

    Los niños y niñas.



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

def recoger_niños
  [].tocar hacer |hijo|
    embedded_relations.each_pair hacer |Nombre, _association|
      without_autobuild hacer
        niño = enviar(Nombre)
        hijo.concat(Arreglo.ajustar(niño)) si niño
      end
    end
  end
end

#collect_descendantsArray<Documento>

Este método es parte de una API privada. Se debe evitar el uso de este método si es posible, ya que podría eliminarse o modificarse en el futuro.

Recoge todos los descendientes de este documento.

Devuelve:



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

def collect_descendants
  hijo = []
  to_expand = _children
  Ampliado = {}

  hasta to_expand.¿vacío?
    expansión = to_expand
    to_expand = []
    expansión.cada hacer |niño|
      Next si Ampliado[niño]

      # No marques expandido si _id es nulo, ya que los documentos se comparan por
      # sus _ids, los documentos incrustados múltiples con IDs nulos compararán
      # de manera equitativa, y algunos documentos no se expandirán.
      Ampliado[niño] = true si niño._id
      hijo << niño
      to_expand += niño._children
    end
  end

  hijo
end

#flag_descendants_persistedArray<Documento>

Marca todos los descendientes como persistidos.

Devuelve:

  • (Array<documento>)

    Los descendientes marcados.



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

def Las descendencias se han guardado exitosamente como tokens de descendientes.
  _descendants.cada hacer |niño|
    niño.nuevo_registro = false
  end
end

#¿hereditaria?true | false

Determina si el documento es una subclase de otro documento.

Ejemplos:

Revisa si el documento es una subclase

Square.new.hereditary?

Devuelve:

  • (true | false)

    Verdadero si es hereditario, falso si no lo es.



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

def ¿hereditaria?
  sí mismo.clase.¿hereditaria?
end

#parentize(documento) ⇒ Documento

Establece una asociación hijo/padre. Esto se utiliza para los objetos recién creados para que se puedan añadir correctamente al grafo.

Ejemplos:

Configura el documento principal.

document.parentize(parent)

Parámetros:

  • Documento (documento)

    El documento principal.

Devuelve:



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

def Parentalizar(Documento)
  sí mismo._parent = Documento
end

#remove_child(child) ⇒ objeto

Remover un documento secundario de este principal. Si una incrusta entonces, establecer en nil; de lo contrario, remover de las numerosas incrustaciones.

Esto se llama desde el comando de persistencia RemoveEmbedded.

Ejemplos:

Remover al niño.

document.remove_child(child)

Parámetros:

  • niño (documento)

    El documento secundario (incrustado) a remover.



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

def remove_child(niño)
  Nombre = niño.association_name
  si niño.¿uno_incrustado?
    atributos.borrar(niño._association.store_as)
    remove_ivar(Nombre)
  else
    relación = enviar(Nombre)
    relación.remover(niño)
  end
end

#reset_persisted_descendantsArray<Documento>

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

Devuelve:



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

def reset_persisted_descendants
  _descendants.cada hacer |niño|
    niño.move_changes
    niño.nuevo_registro = false
  end
  _reset_memoized_descendants!
end