Módulo: Mongoid::Asociación::Referenciado::Autoguardado

Ampliado por:
ActiveSupport::Concern
Incluido en:
Mongoid::Association
Definido en:
lib/mongoid/association/referenced/auto_save.rb

Overview

El módulo Mixin incluido en Mongoid::Document agrega la capacidad de guardar automáticamente documentos del lado opuesto en asociaciones referenciadas al guardar el documento sujeto.

Resumen del método de clase colapsar

Resumen del método de instancia colapsar

Detalles del método de clase

.define_autosave!(asociación) ⇒ Clase

Define el método de autoguardado en la clase propietaria de una asociación para un objeto asociado.

Ejemplos:

Definir el método de autoguardado:

Association::Referenced::Autosave.define_autosave!(association)

Parámetros:

Devuelve:

  • (clase)

    La clase propietaria de la asociación.



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# Archivo 'lib/mongoid/association/referenced/auto_save.rb', línea 62

def sí mismo.define_autosave!(asociación)
  asociación.clase_inversa.tocar hacer |klass|
    save_method = :"autosave_documents_for_#{asociación.Nombre}"
    klass.enviar(define_method, save_method) hacer
      si before_callback_halted?
        sí mismo.antes_de_detenerse_labllamada = false
      else
        __autosaving__ hacer
          si assoc_value = ivar(asociación.Nombre)
            Arreglo(assoc_value).cada hacer |doc|
              Next a menos que changed_for_autosave?(doc)

              pc = doc.¿persistence_context? ? doc.persistence_context : persistence_context.for_child(doc)
              doc.con(pc) hacer |d|
                d.guardar
              end
            end
          end
        end
      end
    end
    klass.after_persist_parent save_method, a menos que: :autosaved?
  end
end

Detalles del método de instancia

#__autosaving__Object

Comience con el guardado automático asociado.

Ejemplos:

Begin autosave.

document.__autosaving__


26
27
28
29
30
31
# Archivo 'lib/mongoid/association/referenced/auto_save.rb', línea 26

def __autosaving__
  Con hilo.begin_autosave(sí mismo)
  rendimiento
asegurar
  Con hilo.exit_autosave(sí mismo)
end

#autosaved?true | false

Se utiliza para evitar bucles infinitos en los guardados automáticos asociados.

Ejemplos:

¿Se guarda automáticamente el documento?

document.autosaved?

Devuelve:

  • (true | false)

    ¿El documento ya se guardó automáticamente?



18
19
20
# Archivo 'lib/mongoid/association/referenced/auto_save.rb', línea 18

def ¿guardado automáticamente?
  Con hilo.¿guardado automáticamente?(sí mismo)
end

#cambiado_por_autoguardado?(doc, visto = Set.nuevo) ⇒ true | false

Verifique si hay cambios para el guardado automático. Retorna verdadero si el document es nuevo, ha cambiado o está marcado para su destrucción, o si algún hijo referenciado en memoria con autosave: true satisface recursivamente la misma condición.

El conjunto visto previene la recursión infinita cuando las asociaciones de autoguardado forman un ciclo (por ejemplo, un belongs_to con autosave: true cuyo destino tiene un has_many con autosave: true que apunta de regreso).

Parámetros:

  • doc (documento)

    El documento a comprobar.

  • visto (Establecer) (por defecto: Set.new)

    Documentos ya visitados (protección de ciclo).

Devuelve:

  • (true | false)

    Si el document necesita autoguardado.



46
47
48
49
50
51
# Archivo 'lib/mongoid/association/referenced/auto_save.rb', línea 46

def changed_for_autosave?(doc, visto = Configura.Nuevo)
  return false a menos que visto.add?(doc)

  doc.nuevo_registro? || doc.¿Cambiado? || doc.marcado_para_destrucción? ||
    autosave_children_changed?(doc, visto)
end