Clase: Mongoid::Asociación::Referenciado::TieneYPerteneceAMuchos::Proxy
- Hereda:
-
Mongoid::Association::Reference::HasMany::Proxy
- Objeto
- Apoderado
- Muchos
- Mongoid::Association::Reference::HasMany::Proxy
- Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy
- Ampliado por:
- ClassMethods
- 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 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)⇒ arreglo (también:<Document> #push)
Añade un documento o un arreglo de documentos a la asociación.
-
#compilar(atributos = {}, tipo = nil) {|doc| ... } ⇒ Documento (también: #new)
Cree un nuevo documento a partir de los atributos y añádalo a esta asociación sin guardarlo.
-
#concat(documents) ⇒ Array<Document>
Añade un arreglo de documentos a la asociación.
-
#delete(document) ⇒ Document (también: #delete_one)
Borre el documento de la asociación.
-
#anular(replacement = []) ⇒ Object (también: #anular_todos, #limpiar, #purgar)
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.
-
#substituye(reemplazo) ⇒ Muchos
Sustituye los documentos objetivo proporcionados por los documentos existentes en la asociación.
-
#sin ámbito ⇒ Criterios
Obtén un criterio para los documentos sin la aplicación del alcance por defecto.
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 de Mongoid::Association::Referenced::HasMany::Proxy::ClassMethods
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, #initialize, #klass, #reset_unloaded, #substitutable
Métodos incluidos de Marshalable
Detalles del constructor
Esta clase hereda un constructor de Mongoid::Association::Referenced::HasMany::Proxy
Gestión dinámica de métodos
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) ⇒ arreglo<documento> 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.
rubocop:disable Metrics/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.nivelar return concat(docs) si docs.tamaño > 1 si (doc = docs.primero) adjuntar(doc) hacer # Ignoramos los cambios en el valor de la clave externa en el # hash de changed_attributes en este bloque de código por dos razones: # # 1) El método add_to_set elimina el valor para el extranjero # clave en el hash de changed_attributes, pero si ingresamos este # método con un valor para la clave foránea 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 externas inversas. # 2) El método reset_unloaded accede al valor de la clave foránea # clave 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 changed_attributes. Esto es cierto solo para los extranjeros # valor clave para las asociaciones HABTM, como las demás asociaciones # usar cadenas para sus valores de clave externa. Para mayor consistencia. # con las otras asociaciones, ignoramos esta adición a # el hash changed_attributes. # Consulte MONGOID-4843 para una discusión más amplia sobre este tema. reset_foreign_key_changes hacer _base.Añadir a conjunto(foreign_key => doc.public_send(_association.clave_primaria)) doc.guardar si ¿niño_persistente?(doc) reinicio_descargado end end end no sincronizado(_base, foreign_key) y sí mismo end |
#compilar(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 compilar(atributos = {}, tipo = nulo) doc = Fábrica.execute_build(tipo || klass, atributos, execute_callbacks: false) adjuntar(doc) doc.aplicar_valores_predeterminados_post_procesados _base.public_send(foreign_key).push(doc.public_send(_association.clave_primaria)) no sincronizado(doc, clave foránea inversa) rendimiento(doc) si ¿block_given? doc.ejecutar_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| append_document(doc, identificaciones, docs, inserts) } _base.push(foreign_key => identificaciones.claves) si ¿persistente? || _¿creando? persist_delayed(docs, inserts) sí mismo end |
#borrar(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(foreign_key => doc.public_send(_association.clave_primaria)) _objetivo.descargado = criterios no sincronizado(_base, foreign_key) end doc end |
#nullify(replacement = []) ⇒ 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| execute_callback :before_remove, doc } cleanup_inverse_for(sustitución) a menos que _association.forced_nil_inverse? _base.conjunto(foreign_key => _base.public_send(foreign_key).borrar) si ¿persistente? limpiar_objetivo_para_anular end |
#substitute(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.
person.preferences.substitute([ 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 clear_foreign_key_changes else push(sustitución.compact.único) end sí mismo end |
#sin ámbito ⇒ Criterios
Obtén un criterio para los documentos sin la aplicación del alcance por defecto.
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(foreign_key)) end |