Módulo: Mongoid::Association::Referenced::Syncable

Incluido en:
Mongoid::Asociación
Definido en:
lib/mongoid/asociación/referenciado/sincronizable.rb

Overview

Este módulo maneja el comportamiento para sincronizar claves externas entre ambos lados de una asociación de muchos a muchos.

Definido en el espacio de nombres

Modules: Métodos de clase

Colapso del resumen del método de instancia

Detalles del método de instancia

#_syncable?(asociación) ⇒ verdadero | falso

¿Es posible sincronizar el documento en el lado inverso? Esto solo es posible si la clave ha cambiado y no se han ejecutado los enlaces de asociación.

Ejemplos:

¿Son sincronizables las claves externas?

document._syncable?(association)

Parámetros:

Devuelve:

  • (verdadero | falso)

    Si podemos sincronizar.



21
22
23
# Archivo 'lib/mongoid/association/referenced/syncable.rb', línea 21

def ¿_sincronizable?(asociación)
  !¿_sincronizado?(asociación.clave externa) && Enviar(asociación.comprobación de clave externa)
end

#_syncedHash

Obtenga las claves externas sincronizadas.

Ejemplos:

Obtenga las claves externas sincronizadas.

document._synced

Devuelve:

  • (Hash)

    Las claves externas sincronizadas.



31
32
33
# Archivo 'lib/mongoid/association/referenced/syncable.rb', línea 31

def _sincronizado
  @_synced ||= {}
end

#_synced?(clave_foránea) ⇒ verdadero | falso

¿Se ha sincronizado el documento para la clave externa?

Ejemplos:

¿Se ha sincronizado el documento?

document._synced?

Parámetros:

  • clave externa (Cadena) -

    La clave externa.

Devuelve:

  • (verdadero | falso)

    Si podemos sincronizar.



43
44
45
# Archivo 'lib/mongoid/association/referenced/syncable.rb', línea 43

def ¿_sincronizado?(clave externa)
  !!_sincronizado[clave externa]
end

#remove_inverse_keys(asociación) ⇒ Objeto

Actualiza las claves inversas al destruir.

Ejemplos:

Actualizar las claves inversas.

document.remove_inverse_keys(association)

Parámetros:

Devuelve:

  • (Objeto) -

    Los valores actualizados.



55
56
57
58
59
60
# Archivo 'lib/mongoid/association/referenced/syncable.rb', línea 55

def eliminar_claves_inversas(asociación)
  claves externas = Enviar(asociación.clave externa)
  a no ser que claves externas.nil? || claves externas.¿vacío?
    asociación.criterios(yo, claves externas).tirar(asociación.clave externa inversa => _id)
  end
end

#update_inverse_keys(asociación) ⇒ Objeto

Actualice las claves inversas para la asociación.

Ejemplos:

Actualizar las claves inversas

document.update_inverse_keys(association)

Parámetros:

Devuelve:

  • (Objeto) -

    Los valores actualizados.



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# Archivo 'lib/mongoid/association/referenced/syncable.rb', línea 70

def update_inverse_keys(asociación)
  Si cambios_anteriores.has_key?(asociación.clave externa)
    antiguo, Nuevo = cambios_anteriores[asociación.clave externa]
    agrega, subs = Nuevo - (antiguo || []), (antiguo || []) - Nuevo

    # Si guardamos automáticamente, no queremos que se agregue un duplicado.
    # $addToSet se ejecutaría previamente y luego el $push y $each del
    # La inversión en el autoguardado causaría esto. Eliminamos cada ID de
    # ¿Qué hay en la memoria en caso de una combinación de adición de identificación y adición de objeto?
    # había ocurrido.
    Si asociación.autosave?
      Enviar(asociación.Nombre).en_memoria.cada hacer |doc|
        agrega.delete_one(doc._id)
      end
    end

    a no ser que agrega.¿vacío?
      asociación.criterios(yo, agrega).sin_opciones.añadir_al_conjunto(asociación.clave externa inversa => _id)
    end
    a no ser que subs.¿vacío?
      asociación.criterios(yo, subs).sin_opciones.tirar(asociación.clave externa inversa => _id)
    end
  end
end