Clase: Mongoid::Association::Referenced::HasMany::Proxy
- Hereda:
- Muchos Mostrar todo
- Ampliado por:
- Reenviable, métodos de clase
- Definido en:
- lib/mongoid/asociación/referenciado/tiene_muchos/proxy.rb
Overview
Proxy transparente para asociaciones has_many. Se devuelve una instancia de esta clase al llamar al método getter de asociación en el documento en cuestión. 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, el array de documentos de la colección del lado opuesto que debe cargarse.
Subclases conocidas directas
Mongoid::Asociación::Referenciado::TieneYPerteneceAMuchos::Proxy
Definido en el espacio de nombres
Modules: Métodos de clase
Resumen constante
Constantes heredadas de Proxy
Resumen de atributos de instancia
Atributos heredados de Proxy
#_association, #_base, #_target
Colapso del resumen del método de instancia
-
#<<(*args) ⇒ Array (también:<Document> #push)
Añade un documento o una matriz de documentos a la asociación.
-
#build(atributos = {}, tipo = nil) ⇒ Documento (también: #nuevo)
Cree un nuevo documento a partir de los atributos y añádalo a esta asociación sin guardarlo.
-
#concat(documents) ⇒ Array<Document>
Añade una matriz de documentos a la asociación.
-
#eliminar(documento) ⇒ Documento (también: #eliminar_uno)
Eliminar el documento de la asociación.
-
#delete_all(condiciones = nulas) ⇒ Entero
Elimina todos los documentos relacionados de la base de datos dadas las condiciones proporcionadas.
-
#destroy_all(condiciones = nulas) ⇒ Entero
Destruye todos los documentos relacionados de la base de datos dadas las condiciones proporcionadas.
-
#cada(&bloque) ⇒ Array<Document>
Iterar sobre cada documento en la asociación y ceder el paso al bloque proporcionado.
-
#¿existe?(id_or_conditions =:none) ⇒ verdadero | falso
Determinar si existe algún documento de esta asociación en la base de datos.
-
#find(*args) {|Objeto|... } ⇒ Documento | Matriz<Document> | nulo
Encuentra el documento coincidente de la asociación, ya sea por identificación o por condiciones.
-
#inicializar(base, destino, asociación) ⇒ Proxy
constructor
Crear una nueva asociación references_many.
-
#nullify ⇒ Objeto (también: #nullify_all)
Elimina todas las asociaciones entre el documento base y los documentos de destino eliminando las claves externas y las referencias, dejando huérfanos los documentos de destino en el proceso.
-
#purgar ⇒ Muchos (también: #limpiar)
Limpiar la asociación.
-
#sustituto(reemplazo) ⇒ Muchos
Sustituye los documentos de destino suministrados por los documentos existentes en la asociación.
-
#sin ámbito ⇒ Criterios
Obtenga un criterio para los documentos sin el alcance predeterminado aplicado.
Métodos incluidos de ClassMethods
Métodos heredados de Many
#¿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
#inicializar(base, destino, asociación) ⇒ Proxy
Crea una nueva asociación references_many. Establece la clave externa y la base en el objeto inverso.
48 49 50 51 52 53 |
# Archivo 'lib/mongoid/association/referenced/has_many/proxy.rb', línea 48 def inicializar(base, destino, asociación) enum = Tiene muchos::Enumerable.Nuevo(destino, base, asociación) Super(base, enum, asociación) hacer aumento_mixto Si klass. && !klass.¿cíclico? end end |
Manejo de métodos dinámicos
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: asegurarnos de que estemos usando consistentemente respond_to_missing
anywhere we define method_missing.
rubocop:deshabilitar Estilo/Respuesta faltante a faltante
465 466 467 468 469 470 471 472 473 |
# Archivo 'lib/mongoid/association/referenced/has_many/proxy.rb', línea 465 ruby2_keywords def método_faltante(Nombre, *args, Ybloque) Si _objetivo.respond_to?(Nombre) _objetivo.Enviar(Nombre, *args, Ybloque) else klass.Enviar(:con_alcance, criterios) hacer criterios.public_send(Nombre, *args, Ybloque) end end end |
Detalles del método de instancia
#<<(*args) ⇒ Array También conocido como: push
Añade un documento o una matriz de documentos a la asociación. Establece el documento principal y actualiza el índice en el proceso.
70 71 72 73 74 75 76 77 78 79 |
# Archivo 'lib/mongoid/association/referenced/has_many/proxy.rb', línea 70 def <<(*args) docs = args.aplanar return concat(docs) Si docs.tamaño > 1 Si (doc = docs.primera) añadir(doc) doc.guardar Si ¿persistente? && !¿_asignando? && !doc.¿validado? end yo end |
#build(atributos = {}, tipo = nil) ⇒ Documento También conocido como: nuevo
Cree un nuevo documento a partir de los atributos y añádalo a esta asociación sin guardarlo.
115 116 117 118 119 120 121 122 123 |
# Archivo 'lib/mongoid/association/referenced/has_many/proxy.rb', línea 115 def construir(atributos = {}, tipo = nulo) Fábrica.ejecutar_construcción(tipo || klass, atributos, ejecutar_devoluciones de llamada: false).grifo hacer |doc| añadir(doc) doc.aplicar_valores_predeterminados_post_procesados rendimiento doc Si ¿bloque_dado? doc.ejecutar devoluciones de llamadas pendientes doc.ejecutar_devoluciones de llamadas(:construir) { doc } end end |
#concat(documents) ⇒ 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.
92 93 94 95 96 97 98 99 100 101 102 103 |
# Archivo 'lib/mongoid/association/referenced/has_many/proxy.rb', línea 92 def concat(Documentos) docs, inserts = [], [] Documentos.cada hacer |doc| siguiente a no ser que doc añadir(doc) guardar_o_retrasar(doc, docs, inserts) Si ¿persistente? end persist_retrasado(docs, inserts) yo end |
#eliminar(documento) ⇒ Documento También conocido como: delete_one
Borra el documento de la asociación. Esto establecerá la clave externa del documento en nil. Si las opciones dependientes de la asociación son :delete_all o :destroy, se realizará la eliminación correspondiente.
137 138 139 140 141 142 143 144 145 146 147 148 |
# Archivo 'lib/mongoid/association/referenced/has_many/proxy.rb', línea 137 def borrar(Documento) ejecutar_devoluciones_de_llamadas_alrededor(:eliminar, Documento) hacer resultado = _objetivo.borrar(Documento) hacer |doc| Si doc unbind_one(doc) cascade!(doc) a no ser que ¿_asignando? end end resultado.grifo { reinicio_descargado } end end |
#delete_all(condiciones = nulas) ⇒ Entero
Elimina todos los documentos relacionados de la base de datos dadas las condiciones proporcionadas.
166 167 168 |
# Archivo 'lib/mongoid/association/referenced/has_many/proxy.rb', línea 166 def eliminar_todo(condiciones = nulo) eliminar_todo(condiciones, :borrar_todo) end |
#destroy_all(conditions = nil) ⇒ Integer
Destruye todos los documentos relacionados de la base de datos dadas las condiciones proporcionadas.
182 183 184 |
# Archivo 'lib/mongoid/association/referenced/has_many/proxy.rb', línea 182 def destruir_todo(condiciones = nulo) eliminar_todo(condiciones, :destruir_todo) end |
#cada(&bloque) ⇒ Matriz
Esto cargará toda la asociación en la memoria.
Iterar sobre cada documento en la asociación y ceder el paso al bloque proporcionado.
197 198 199 200 201 202 203 |
# Archivo 'lib/mongoid/association/referenced/has_many/proxy.rb', línea 197 def cada(Ybloque) Si bloque _objetivo.cada(Ybloque) else to_enum end end |
#¿existe?(id_or_conditions =:none) ⇒ verdadero | falso
Determinar si existe algún documento de esta asociación en la base de datos.
Si la asociación contiene documentos pero todos los documentos existen solo en la aplicación, es decir, no se han conservado en la base de datos, este método devuelve falso.
Este método consulta la base de datos en cada invocación incluso si la asociación ya está cargada en la memoria.
227 228 229 |
# Archivo 'lib/mongoid/association/referenced/has_many/proxy.rb', línea 227 def ¿Existe?(id_o_condiciones = :ninguno) criterios.¿Existe?(id_o_condiciones) end |
#find(*args) {|Object| ... } ⇒ Document | Array<Document> | nil
Cada argumento puede ser un ID individual, un array de ID o un array anidado. Cada array se aplanará.
Esto mantendrá los documentos coincidentes en la memoria para iteraciones posteriores.
Encuentra el documento coincidente de la asociación, ya sea por identificación o por condiciones.
Este método delega en Mongoid::Criteria#find. Si no se le asigna un bloque, devuelve uno o varios documentos para los valores _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.
262 263 264 265 266 |
# Archivo 'lib/mongoid/association/referenced/has_many/proxy.rb', línea 262 def buscar(*args, Ybloque) coincidencia = criterios.buscar(*args, Ybloque) Arreglo(coincidencia).cada { |doc| _objetivo.Push(doc) } coincidencia end |
#nullify ⇒ Objeto También conocido como: nullify_all
Elimina todas las asociaciones entre el documento base y los documentos de destino eliminando las claves externas y las referencias, dejando huérfanos los documentos de destino en el proceso.
274 275 276 277 278 279 280 |
# Archivo 'lib/mongoid/association/referenced/has_many/proxy.rb', línea 274 def anular criterios.update_all(clave externa => nulo) _objetivo.borrar hacer |doc| unbind_one(doc) doc.atributos cambiados.borrar(clave externa) end end |
#purgar ⇒ Muchos También conocido como: limpiar
Borrar la asociación. Se eliminarán los documentos de la base de datos si ya están almacenados.
291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 |
# Archivo 'lib/mongoid/association/referenced/has_many/proxy.rb', línea 291 def purga return anular a no ser que _asociación.¿destructivo? después de eliminar el error = nulo criterios.eliminar_todo muchos = _objetivo.borrar hacer |doc| ejecutar_devolución de llamada :antes_de_eliminar, doc unbind_one(doc) doc.destruido = true begin ejecutar_devolución de llamada :después de eliminar, doc rescate Error estándar => e después de eliminar el error = e end end propagar después de eliminar el error Si después de eliminar el error muchos end |
#sustituto(reemplazo) ⇒ Muchos
Sustituye los documentos de destino proporcionados por los documentos existentes en la asociación. Si el nuevo destino es nulo, realiza la eliminación necesaria.
324 325 326 327 328 329 330 331 332 333 334 335 336 337 |
# Archivo 'lib/mongoid/association/referenced/has_many/proxy.rb', línea 324 def sustituir(sustitución) Si sustitución new_docs, docs = sustitución.compact, [] nuevos_ids = new_docs.map(Y:_identificación) eliminar_no_en(nuevos_ids) new_docs.cada hacer |doc| docs.Push(doc) Si doc.Enviar(clave externa) != _base.Enviar(_asociación.clave_primaria) end concat(docs) else purga end yo end |
#sin ámbito ⇒ Criterios
Obtenga un criterio para los documentos sin el alcance predeterminado aplicado.
346 347 348 |
# Archivo 'lib/mongoid/association/referenced/has_many/proxy.rb', línea 346 def sin alcance klass.sin alcance.donde(clave externa => _base.Enviar(_asociación.clave_primaria)) end |