Clase: Mongoid::Association::Embedded::EmbedsMany::Proxy
- Hereda:
- Muchos Mostrar todo
- Ampliado por:
- ClassMethods
- Incluye:
- Procesable por lotes
- Definido en:
- lib/mongoid/association/embedded/embeds_many/proxy.rb
Overview
Proxy transparente para asociaciones embeds_many. Se devuelve una instancia de esta clase al llamar al método getter de asociación en el documento padre. Esta clase hereda de Mongoid::Association::Proxy y reenvía la mayoría de sus métodos al destino de la asociación, es decir, al arreglo de documentos secundarios.
Definido bajo Namespace
Modules: ClassMethods
Resumen constante
Constantes heredadas de Proxy
Resumen del atributo de la instancia
Atributos heredados de Proxy
#_association, #_base, #_target
Resumen del método de instancia colapsar
-
#<<(*args) ⇒ Object (también: #push)
Añade un documento o un arreglo de documentos a la asociación.
-
#_remover(documento) ⇒ Objeto
privado
Remueve un único documento de la colección *solo en la memoria*.
-
#as_document ⇒ Array<Hash>
Obtén esta asociación como su representación en la base de datos.
-
#compilar(atributos = {}, tipo = nil) ⇒ Documento (también: #new)
Crea un nuevo documento en la asociación y lo agrega al destino.
-
#claro ⇒ yo mismo
Limpiar la asociación.
-
#concat(docs) ⇒ Array<Document>
Añade un arreglo de documentos a la asociación.
-
#count(*args, &block) ⇒ Integer
Devuelve un recuento de la cantidad de documentos de la asociación que realmente se han conservado en la base de datos.
-
#borrar(documento) ⇒ Documento | nulo (también: #eliminar_uno)
Borra el documento proporcionado del objetivo.
-
#delete_all(condiciones = {}) ⇒ Entero
Eliminar todos los documentos en la asociación sin ejecutar callbacks.
-
#delete_if ⇒ EmbedsMany::Proxy | Enumerator
Borra todos los documentos para los que el bloque proporcionado devuelve verdadero.
-
#destroy_all(condiciones = {}) ⇒ Integer
Destruye todos los documentos de la asociación mientras se ejecutan devoluciones de llamadas.
-
#¿exists?(id_or_conditions = :none) ⇒ true | false
Determinar si existe algún documento de esta asociación en la base de datos.
-
#find {|Object| ... } ⇒ Document | Array<Document> | nil
Encuentra un documento en esta asociación a través de varios métodos diferentes.
-
#inicializar(base, objetivo, asociación) ⇒ Muchos
constructor
Instancia una nueva asociación embeds_many.
-
#pop(count= nil) ⇒ Document | Array<Document> | nil
Extraiga los documentos de la asociación.
-
# shift(count = nil) ⇒ Documento |Arreglo<Document> | nil
Desplace documentos de la asociación.
-
#sustituir(docs) ⇒ Muchos
Sustituye los documentos de destino proporcionados por los documentos existentes en la relación.
-
#sin ámbito ⇒ Criterios
Devuelve la asociación con todo el alcance anterior eliminado.
Métodos incluidos de ClassMethods
eager_loader, embedded?, foreign_key_suffix
Métodos incluidos de Batchable
#batch_clear, #batch_insert, #batch_remove, #batch_replace
Métodos incluidos desde Positional
Métodos heredados de Muchos
#¿en blanco?, #crear, #¡crear!, #buscar_o_crear_por, #¡buscar_o_crear_por!, #buscar_o_inicializar_por, #¿nulo?, #¿responder_a?, #con ámbito, #hash_serializable
Métodos heredados de Proxy
apply_ordering, #extend_proxies, #klass, #reset_unloaded, #substitutable
Métodos incluidos de Marshalable
Detalles del constructor
#initialize(base, target, association) ⇒ Muchos
Instancia una nueva asociación embeds_many.
67 68 69 70 71 72 73 74 75 76 77 |
# Archivo 'lib/mongoid/association/embedded/embeds_many/proxy.rb', línea 67 def inicializar(base, Objetivo, asociación) super hacer _objetivo.cada_con_índice hacer |doc, index| integrar(doc) doc._index = index end update_attributes_hash @_unscoped = _objetivo.dup @_objetivo = Alcance(_objetivo) end end |
Gestión dinámica de métodos
Esta clase maneja métodos dinámicos a través del método method_missing
#método_faltante ⇒ Criterios | Objeto (privado)
Si la matriz de destino no responde al método proporcionado, intente encontrar un ámbito o criterio con nombre en la clase y envíe la llamada allí.
Si el método existe en el arreglo, utiliza el comportamiento proxy por defecto.
TODO: Asegúrate de que estamos usando respond_to_missing de manera consistente.
anywhere we define method_missing.
rubocop:disable Style/MissingRespondToMissing
551 552 553 554 555 556 557 |
# Archivo 'lib/mongoid/association/embedded/embeds_many/proxy.rb', línea 551 ruby2_keywords def method_missing(Nombre, *args, Ybloque) return super si _objetivo.respond_to?(Nombre) klass.enviar(con: alcance, criterios) hacer criterios.public_send(Nombre, *args, Ybloque) end end |
Detalles del método de instancia
#<<(*args) ⇒ objeto También conocido como: push
Adjunta un documento o un arreglo de documentos a la asociación. Establecerá el elemento principal y actualizará el índice en el proceso.
89 90 91 92 93 94 95 96 97 98 99 100 |
# Archivo 'lib/mongoid/association/embedded/embeds_many/proxy.rb', línea 89 def <<(*args) docs = args.nivelar return a menos que docs.any? return concat(docs) si docs.tamaño > 1 docs.primero.tocar hacer |doc| adjuntar(doc) doc.guardar si ¿persistente? && !¿_asignando? end sí mismo end |
#_remove(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.
Elimina un solo documento de la colección *solo en memoria*.No conservará el cambio.
236 237 238 239 240 241 |
# Archivo 'lib/mongoid/association/embedded/embeds_many/proxy.rb', línea 236 def remover(Documento) _objetivo.delete_one(Documento) _unscoped.delete_one(Documento) update_attributes_hash reindex end |
#as_document ⇒ Matriz<Hash>
Obtén esta asociación como su representación en la base de datos.
110 111 112 |
# Archivo 'lib/mongoid/association/embedded/embeds_many/proxy.rb', línea 110 def as_document as_attributes.collect { |attrs| BSON::Documento.Nuevo(attrs) } end |
#compilar(atributos = {}, tipo = nil) ⇒ Documento También conocido como: nuevo
Compila un nuevo documento en la asociación y lo añade al destino. Acepta un tipo opcional si deseas especificar una subclase.
138 139 140 141 142 143 144 145 146 147 |
# Archivo 'lib/mongoid/association/embedded/embeds_many/proxy.rb', línea 138 def compilar(atributos = {}, tipo = nulo) Fábrica.execute_build(tipo || _association.klass, atributos, execute_callbacks: false).tocar hacer |doc| adjuntar(doc) doc.aplicar_valores_predeterminados_post_procesados rendimiento doc si ¿block_given? doc.ejecutar_llamadas_pendientes doc.run_callbacks(compilar) { doc } _base._reset_memoized_descendants! end end |
#claro ⇒ yo mismo
Borrar la asociación. Se borrarán los documentos de la base de datos si ya están guardados.
Si el documento host no se conserva pero su _id coincide con un documento conservado, llamar a #clear en una asociación eliminará los documentos de la asociación de la base de datos, incluso aunque el conjunto de documentos en la aplicación (tal como se carga en el host) sea diferente de lo que está en la base de datos, y el host puede no contener ningún documento conservado en la asociación.
165 166 167 168 169 |
# Archivo 'lib/mongoid/association/embedded/embeds_many/proxy.rb', línea 165 def borrar limpieza por lotes(_objetivo.dup) update_attributes_hash sí mismo end |
#concat(docs) ⇒ Array<Document>
Añade una matriz de documentos a la asociación. Realiza una inserción por lotes de los documentos en lugar de conservarlos uno a uno.
123 124 125 126 |
# Archivo 'lib/mongoid/association/embedded/embeds_many/proxy.rb', línea 123 def concat(docs) batch_insert(docs) a menos que docs.¿vacío? sí mismo end |
#count(*args, &block) ⇒ Integer
Devuelve un recuento de la cantidad de documentos de la asociación que realmente se han conservado en la base de datos.
Utiliza #size si quieres el número total de documentos.
Si hay argumentos o un bloque presentes, #count delegará en el método #count de target y se incluirán tanto los documentos que han sido guardados como los que no lo han sido.
193 194 195 196 197 |
# Archivo 'lib/mongoid/association/embedded/embeds_many/proxy.rb', línea 193 def count(*args, Ybloque) return _objetivo.count(*args, Ybloque) si args.any? || bloque _objetivo.count(Y:¿persistente?) end |
#eliminar(documento) ⇒ Documento | nil También conocido como: delete_one
Borrar el documento proporcionado del destino. Este método se utiliza para volver a indexar el arreglo después de que ocurra la operación.
208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 |
# Archivo 'lib/mongoid/association/embedded/embeds_many/proxy.rb', línea 208 def borrar(Documento) execute_callbacks_around(remover, Documento) hacer _objetivo.delete_one(Documento).tocar hacer |doc| si doc && !¿_binding? _unscoped.delete_one(doc) si ¿_asignando? _base.add_atomic_pull(doc) else doc.borrar(suprimir: true) unbind_one(doc) end update_attributes_hash end reindex end end end |
#delete_all(condiciones = {}) ⇒ Integer
Eliminar todos los documentos en la asociación sin ejecutar callbacks.
254 255 256 |
# Archivo 'lib/mongoid/association/embedded/embeds_many/proxy.rb', línea 254 def delete_all(condiciones = {}) eliminar_todo(condiciones, borrar) end |
#delete_if ⇒ EmbedsMany::Proxy | Enumerator
Borra todos los documentos para los que el bloque proporcionado devuelve verdadero.
267 268 269 270 271 272 273 |
# Archivo 'lib/mongoid/association/embedded/embeds_many/proxy.rb', línea 267 def delete_if return super a menos que ¿block_given? _objetivo.dup.cada { |doc| borrar(doc) si rendimiento doc } sí mismo end |
#destroy_all(conditions = {}) ⇒ Integer
Destruye todos los documentos de la asociación mientras se ejecutan devoluciones de llamadas.
286 287 288 |
# Archivo 'lib/mongoid/association/embedded/embeds_many/proxy.rb', línea 286 def destruir_todo(condiciones = {}) eliminar_todo(condiciones, :destroy) end |
#¿exists?(id_or_conditions = :none) ⇒ true | false
Determinar si existe algún documento de esta asociación en la base de datos.
306 307 308 309 310 311 312 313 |
# Archivo 'lib/mongoid/association/embedded/embeds_many/proxy.rb', línea 306 def ¿existe?(id_or_conditions = :ninguno) caso id_or_conditions Cuando :ninguno entonces _objetivo.any?(Y:¿persistente?) Cuando nulo, false entonces false Cuando Picadillo entonces dónde(id_or_conditions).any?(Y:¿persistente?) else dónde(_id: id_or_conditions).any?(Y:¿persistente?) end end |
#find {|Object| ... } ⇒ Document | Array<Document> | nil
Encuentra un documento en esta asociación a través de varios métodos diferentes.
Este método delega en Mongoid::Criteria#find. Si este método no recibe un bloque, devuelve uno o varios documentos para los valores de _id proporcionados.
Si se le asigna un bloque a este método, devuelve el primer documento de los encontrados por el objeto Criteria actual para el cual el bloque devuelve un valor verdadero.
340 341 342 |
# Archivo 'lib/mongoid/association/embedded/embeds_many/proxy.rb', línea 340 def buscar(...) criterios.buscar(...) end |
#pop(count = nil) ⇒ Document | Array<Document> | nil
Extraiga documentos de la asociación. Esto puede ser un solo documento o varios, y se guardarán automáticamente los cambios.
365 366 367 368 369 370 |
# Archivo 'lib/mongoid/association/embedded/embeds_many/proxy.rb', línea 365 def pop(count = nulo) return [] si count&.zero? docs = _objetivo.último(count || 1).cada { |doc| borrar(doc) } (count.nil? || docs.¿vacío?) ? docs.primero : docs end |
#shift(count = nil) ⇒ Document | Array<Document> | nil
Desplaza los documentos fuera de la asociación. Esto puede ser un solo documento o varios, y se guardarán automáticamente los cambios.
385 386 387 388 389 390 |
# Archivo 'lib/mongoid/association/embedded/embeds_many/proxy.rb', línea 385 def turno(count = nulo) return [] si count&.zero? docs = _objetivo.primero(count || 1).cada { |doc| borrar(doc) } (count.nil? || docs.¿vacío?) ? docs.primero : docs end |
#substitute(docs) ⇒ Many
Sustituye los documentos de destino proporcionados por los documentos existentes en la relación.
401 402 403 404 405 |
# Archivo 'lib/mongoid/association/embedded/embeds_many/proxy.rb', línea 401 def sustituir(docs) reemplazo por lotes(docs) update_attributes_hash sí mismo end |
#sin ámbito ⇒ Criterios
Devuelve la asociación con todo el alcance anterior eliminado. Esta es la representación exacta de la documentación en la base de datos.
414 415 416 417 418 419 |
# Archivo 'lib/mongoid/association/embedded/embeds_many/proxy.rb', línea 414 def sin alcance criterion = klass.sin alcance criterion. = true criterion.Documentos = _unscoped.delete_if(Y:marked_for_destruction?) criterion end |