Clase: Mongoid::Asociación::Referenciado::TieneYPerteneceAMuchos::Proxy

Hereda:
Mongoid::Association::Reference::HasMany::Proxy Mostrar todo
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

Proxy::KEEPER_METHODS

Resumen del atributo de la instancia

Atributos heredados de Proxy

#_association, #_base, #_target

Resumen del método de instancia colapsar

Métodos incluidos de ClassMethods

eager_loader, embedded?

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

#eager_loader, #embedded?

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

#marshal_dump, #marshal_load

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

Ejemplos:

Anexar un documento.

person.posts << post

Sube un documento.

person.posts.push(post)

Concatenar con otros documentos.

person.posts.concat([ post_one, post_two ])

Parámetros:

  • *argumentos (documento...)

    Cualquier número de documentos.

Devuelve:



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.

Ejemplos:

Elabora un nuevo documento sobre la asociación.

person.posts.build(:title => "A new post")

Parámetros:

  • atributos (Hash) (por defecto: {})

    Los atributos del nuevo documento.

  • tipo (Clase) (predeterminado: nulo)

    La subclase opcional a construir.

Rendimientos:

  • (doc)

Devuelve:



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.

Ejemplos:

Concatenar con otros documentos.

person.posts.concat([ post_one, post_two ])

Parámetros:

  • Documentos (Array<documento>)

    Los documentos para agregar.

Devuelve:



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.

Ejemplos:

Eliminar el documento.

person.posts.delete(post)

Parámetros:

  • Documento (documento)

    El documento que se va a remover.

Devuelve:

  • (documento)

    El documento 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.

Ejemplos:

Anule la asociación.

person.preferences.nullify

Parámetros:

  • sustitución (Array<documento>) (predeterminado: [])

    Los documentos de sustitución.



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 ])

Ejemplos:

Reemplazar la asociación.

Parámetros:

  • sustitución (Array<documento>)

    El objetivo de reemplazo.

Devuelve:



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 ámbitoCriterios

Obtén un criterio para los documentos sin la aplicación del alcance por defecto.

Ejemplos:

Obtener los criterios no acotados.

person.preferences.unscoped

Devuelve:



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