Clase: Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy
- Hereda:
-
Referenced::HasMany::Proxy
- Objeto
- Referenced::HasMany::Proxy
- Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy
- Ampliado por:
- ClassMethods
- Definido en:
- lib/mongoid/association/referenced/has_and_belongs_to_many/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 sujeto. Esta clase hereda de Mongoid::Association::Proxy y reenvía la mayoría de sus métodos al objetivo de la asociación, es decir, al arreglo de documentos en la colección del otro lado que debe cargarse.
Definido bajo Namespace
Modules: ClassMethods
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 guardar.
-
#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)
Remueve todas las asociaciones entre el documento base y los documentos de destino borrando 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
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.
56 57 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 |
# Archivo 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', línea 56 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 el 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 ocurre 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 # utilice cadenas para sus valores de clave externa. Por coherencia # 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 ¿child_persistable?(doc) restablecer_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 guardar.
120 121 122 123 124 125 126 127 128 129 |
# Archivo 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', línea 120 def compilar(atributos = {}, tipo = nulo) doc = Fábrica.execute_build(tipo || klass, atributos, execute_callbacks: false) adjuntar(doc) doc.apply_post_processed_defaults _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>
Anexa un arreglo de documentos a la asociación. Realiza una inserción por lotes de los documentos en lugar de guardar uno a la vez.
102 103 104 105 106 107 108 |
# Archivo 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', línea 102 def concat(Documentos) identificadores, docs, inserts = {}, [], [] Documentos.cada { |doc| append_document(doc, identificadores, docs, inserts) } _base.push(foreign_key => identificadores.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.
143 144 145 146 147 148 149 150 151 |
# Archivo 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', línea 143 def borrar(Documento) doc = super si doc && ¿persistente? _base.tirar(foreign_key => doc.public_send(_association.clave_primaria)) _target.descargado = criterios no sincronizado(_base, foreign_key) end doc end |
#nullify(replacement = []) ⇒ objeto También conocido como: nullify_all, clear, purge
Remueve todas las asociaciones entre el documento base y los documentos de destino borrando las claves externas y las referencias, dejando huérfanos los documentos de destino en el proceso.
165 166 167 168 169 170 |
# Archivo 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', línea 165 def anular(reemplazo = []) _target.cada { |doc| execute_callback :before_remove, doc } cleanup_inverse_for(reemplazo) a menos que _association.forced_nil_inverse? _base.Configura(foreign_key => _base.public_send(foreign_key).borrar) si ¿persistente? limpiar_objetivo_para_anular end |
#substitute(reemplazo) ⇒ Muchos
Sustituye los documentos de destino suministrados por los documentos existentes en la asociación. Si el nuevo objetivo es nulo, realice la eliminación necesaria.
person.preferences.substitute([ nueva_publicación ])
186 187 188 189 190 191 192 193 194 195 |
# Archivo 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', línea 186 def sustituir(reemplazo) depuración(reemplazo) si reemplazo.blank? restablecer_descargado clear_foreign_key_changes else push(reemplazo.compact.uniq) end sí mismo end |
#sin ámbito ⇒ Criterios
Obtén un criterio para los documentos sin la aplicación del alcance por defecto.
204 205 206 |
# Archivo 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', línea 204 def sin ámbito klass.sin ámbito.any_in(_id: _base.public_send(foreign_key)) end |