Clase: Mongoid::Asociación::Referenciado::TieneYPerteneceAMuchos::Proxy
- Hereda:
-
Mongoid::Asociación::Referenciado::TieneMuchos::Proxy
- Objeto
- Apoderado
- Muchos
- Mongoid::Asociación::Referenciado::TieneMuchos::Proxy
- Mongoid::Asociación::Referenciado::TieneYPerteneceAMuchos::Proxy
- Ampliado por:
- Métodos de clase
- Definido en:
- lib/mongoid/asociación/referenciado/tiene_y_pertenece_a_muchos/proxy.rb
Overview
Proxy transparente para asociaciones "has_and_belongs_to_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.
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) {|doc|... } ⇒ 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.
-
#anular(reemplazo = []) ⇒ Objeto (también: #nullify_all, #clear, #purge)
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.
-
#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 Mongoid::Association::Referenced::HasMany::Proxy
#eliminar_todo, #destruir_todo, #cada uno, #¿existe?, #buscar, #inicializar
Métodos incluidos en Mongoid::Association::Referenced::HasMany::Proxy::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
aplicar_ordenamiento, #extender_proxies, #inicializar, #klass, #reiniciar_descargado, #sustituible
Métodos incluidos de Marshalable
Detalles del constructor
Esta clase hereda un constructor de Mongoid::Association::Referenced::HasMany::Proxy
Manejo de métodos dinámicos
Esta clase gestiona métodos dinámicos mediante el método method_missing en la clase Mongoid::Association::Referenced::HasMany::Proxy
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.
rubocop:deshabilitar Métricas/AbcSize
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# Archivo 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', línea 58 def <<(*args) docs = args.aplanar return concat(docs) Si docs.tamaño > 1 Si (doc = docs.primera) añadir(doc) hacer # Ignoramos los cambios en el valor de la clave externa en el # changed_attributes hash en este bloque de código por dos razones: # # 1) El método add_to_set elimina el valor del elemento externo. # clave en el hash changed_attributes, pero si ingresamos esto # método con un valor para la clave externa en el # changed_attributes hash, entonces queremos que exista fuera # Este método también. Se usa más adelante en Syncable. # módulo para establecer las claves foráneas inversas. # 2) El método reset_unloaded accede al valor de la variable externa # tecla en _base, lo que hace que se agregue a la # hash changed_attributes. Esto sucede porque al leer # un atributo "redimensionable", se agrega automáticamente al # hash de atributos modificados. Esto solo es válido para el foráneo. # valor clave para las asociaciones HABTM como las demás asociaciones # usar cadenas para sus valores de clave externa. Para mayor consistencia. # con las demás asociaciones, ignoramos esta adición a # el hash de atributos cambiados. # Consulte MONGOID-4843 para obtener una discusión más extensa sobre esto. reset_foreign_key_changes hacer _base.añadir_al_conjunto(clave externa => doc.public_send(_asociación.clave_primaria)) doc.guardar Si ¿niño_persistente?(doc) reinicio_descargado end end end no sincronizado(_base, clave externa) y yo end |
#build(atributos = {}, tipo = nil) {|doc|... } ⇒ Documento También conocido como: nuevo
Cree un nuevo documento a partir de los atributos y añádalo a esta asociación sin guardarlo.
123 124 125 126 127 128 129 130 131 132 |
# Archivo 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', línea 123 def construir(atributos = {}, tipo = nulo) doc = Fábrica.ejecutar_construcción(tipo || klass, atributos, ejecutar_devoluciones de llamada: false) añadir(doc) doc.aplicar_valores_predeterminados_post_procesados _base.public_send(clave externa).Push(doc.public_send(_asociación.clave_primaria)) no sincronizado(doc, clave externa inversa) rendimiento(doc) Si ¿bloque_dado? doc.ejecutar devoluciones de llamadas pendientes doc 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.
105 106 107 108 109 110 111 |
# Archivo 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', línea 105 def concat(Documentos) identificaciones, docs, inserts = {}, [], [] Documentos.cada { |doc| adjuntar_documento(doc, identificaciones, docs, inserts) } _base.Push(clave externa => identificaciones.claves) Si ¿persistente? || _¿creando? 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.
146 147 148 149 150 151 152 153 154 |
# Archivo 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', línea 146 def borrar(Documento) doc = Super Si doc && ¿persistente? _base.tirar(clave externa => doc.public_send(_asociación.clave_primaria)) _objetivo._descargado = criterios no sincronizado(_base, clave externa) end doc end |
#nullify(reemplazo = []) ⇒ Objeto También conocido como: nullify_all, clear, purge
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.
168 169 170 171 172 173 |
# Archivo 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', línea 168 def anular(sustitución = []) _objetivo.cada { |doc| ejecutar_devolución de llamada :antes_de_eliminar, doc } limpieza_inversa_para(sustitución) a no ser que _asociación.forced_nil_inverse? _base.conjunto(clave externa => _base.public_send(clave externa).borrar) Si ¿persistente? borrar_objetivo_para_anular 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.
persona.preferencias.sustituir([nueva_publicación])
189 190 191 192 193 194 195 196 197 198 |
# Archivo 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', línea 189 def sustituir(sustitución) purga(sustitución) Si sustitución.blank? reinicio_descargado borrar cambios de clave externa else Push(sustitución.compact.único) end yo end |
#sin ámbito ⇒ Criterios
Obtenga un criterio para los documentos sin el alcance predeterminado aplicado.
207 208 209 |
# Archivo 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', línea 207 def sin alcance klass.sin alcance.any_in(_id: _base.public_send(clave externa)) end |