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

Hereda:
Mongoid::Asociación::Referenciado::TieneMuchos::Proxy Mostrar todo
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

Proxy::MÉTODOS_KEEPER

Resumen de atributos de instancia

Atributos heredados de Proxy

#_association, #_base, #_target

Colapso del resumen del método de instancia

Métodos incluidos de ClassMethods

eager_loader, ¿incrustado?

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

#eager_loader, #¿incrustado?

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

#marshal_dump, #marshal_load

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

Ejemplos:

Anexar un documento.

person.posts << post

Empujar 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:

  • (Matriz)

    Los documentos cargados.



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.

Ejemplos:

Construir un nuevo documento sobre la asociación.

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

Parámetros:

  • atributos (Hash) (predeterminado: {})

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

Ejemplos:

Concatenar con otros documentos.

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

Parámetros:

  • Documentos (Matriz)

    Los documentos para agregar.

Devuelve:

  • (Matriz)

    Los documentos.



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.

Ejemplos:

Eliminar el documento.

person.posts.delete(post)

Parámetros:

  • Documento (Documento) -

    El documento a eliminar.

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(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.

Ejemplos:

Anular la asociación.

person.preferences.nullify

Parámetros:

  • sustitución (Matriz) (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| 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])

Ejemplos:

Reemplazar la asociación.

Parámetros:

  • sustitución (Matriz)

    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
    borrar cambios de clave externa
  else
    Push(sustitución.compact.único)
  end
  yo
end

#sin ámbitoCriterios

Obtenga un criterio para los documentos sin el alcance predeterminado aplicado.

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(clave externa))
end