Módulo: Mongoid::Association::Referenced::AutoSave

Estendido por:
ActiveSupport::Concern
Incluído em:
Mongoid::Associação
Definido em:
lib/mongoid/association/referenced/auto_save.rb

Visão geral

Módulo Mixin incluído no Mongoid::Document que adiciona a capacidade de salvar automaticamente documentos do lado oposto em associações referenciadas ao salvar o documento do assunto.

Recolhimento do Resumo do método de classe

Recolhimento do Resumo do método de instância

Detalhes do método de classe

.define_autosave!(associação) ➤ Classe

Defina o método autosave na classe proprietário de uma associação para um objeto associado.

Exemplos:

Defina o método de salvamento automático:

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

Parâmetros:

Retorna:

  • (Classe)

    A classe de proprietário da associação.



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

def auto.define_autosave!(associação)
  associação.inverse_class.toque fazer |classe|
    save_method = :"autosave_documents_for_#{associação.name}"
    classe.enviar(:define_method, save_method) fazer
      se before_callback_handed?
        auto.before_callback_handed = false
      mais
        __auto save__ fazer
          se assoc_value = ivar(associação.name)
            Array(assoc_value).cada fazer |doc|
              próximo a menos que change_for_autosave?(doc)

              PC = doc.persistence_context? ? doc.persistence_context : persistence_context.for_child(doc)
              doc.com(PC) fazer |d|
                d.Salvar
              end
            end
          end
        end
      end
    end
    classe.after_persist_parent save_method, a menos que: :autosagravado?
  end
end

Detalhes do método de instância

#__autosaving__Object

Inicie o salvamento automático associado.

Exemplos:

Begin autosave.

document.__autosaving__


26
27
28
29
30
31
# File 'lib/mongoid/association/referenced/auto_save.rb', linha 26

def __auto save__
  Threaded.begin_autosave(auto)
  rendimento
garantir
  Threaded.exit_autosave(auto)
end

#salvo automaticamente?verdadeiro | false

Usado para evitar loops infinitos em salvamentos automáticos associados.

Exemplos:

O documento é salvo automaticamente?

document.autosaved?

Retorna:

  • (verdadeiro | falso)

    O documento já foi salvo automaticamente?



18
19
20
# File 'lib/mongoid/association/referenced/auto_save.rb', linha 18

def salvo automaticamente?
  Threaded.salvo automaticamente?(auto)
end

#change_for_autosave?(doc, seen = Set.new) ➤ verdadeiro | false

Verifique se há alterações para o salvamento automático. Retorna verdadeiro se o document for novo, alterado ou marcado para destruição, ou se qualquer filho referenciado na memória com salvamento automático: verdadeiro recursivamente satisfaz a mesma condição.

O conjunto seen evita a recursão infinita quando associações de autosave formam um ciclo (por exemplo, um requires_to com autosave: true cujo destino tem um has_many com autosave: true apontando para trás).

Parâmetros:

  • doc (Documento)

    O documento a ser verificado.

  • visto (Definir) (padrão para: Set.new)

    Documentos já visitados (guarda do ciclo).

Retorna:

  • (verdadeiro | falso)

    Se o document precisa ser salvo automaticamente.



46
47
48
49
50
51
# File 'lib/mongoid/association/referenced/auto_save.rb', linha 46

def change_for_autosave?(doc, visto = definir.Novo)
  Método false a menos que visto.add?(doc)

  doc.new_record? || doc.mudou? || doc.marcado_for_destruction? ||
    autosave_children_changed?(doc, visto)
end