Clase: Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy

Hereda:
Referenced::HasMany::Proxy
  • Objeto
Mostrar todo
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

Métodos incluidos de ClassMethods

eager_loader, embedded?

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.

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:

  • *args (documento...)

    Cualquier cantidad de documentos.

Devuelve:



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.

Ejemplos:

Elabora un nuevo documento sobre la asociación.

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

Parámetros:

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

    Los atributos del nuevo documento.

  • tipo (clase) (valor por defecto: nil)

    La subclase opcional para compilar.

Rendimientos:

  • (doc)

Devuelve:



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.

Ejemplos:

Concatenar con otros documentos.

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

Parámetros:

  • Documentos (Array<documento>)

    Los Docs que añadir.

Devuelve:



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.

Ejemplos:

Borrar el documento.

person.posts.delete(post)

Parámetros:

  • Documento (documento)

    El documento que se va a remover.

Devuelve:

  • (documento)

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

Ejemplos:

Anule la asociación.

person.preferences.nullify

Parámetros:

  • reemplazo (Array<documento>) (valor por defecto: [])

    Los documentos de reemplazo.



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

Ejemplos:

Reemplazar la asociación.

Parámetros:

  • reemplazo (Array<documento>)

    El objetivo de reemplazo.

Devuelve:

  • (Muchos)

    La asociació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 á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:



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