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

Incluído em:
Mongoid::Associação
Definido em:
lib/mongoid/association/referenced/syncable.rb

Visão geral

Este módulo lida com o comportamento da sincronização de chaves estrangeiras entre ambos os lados de associações de muitos para muitos.

Definido sob namespace

Módulos: Métodos de classe

Recolhimento do Resumo do método de instância

Detalhes do método de instância

#_syncable?(associação) ➤ true | false

O documento pode ser sincronizado no lado inverso? Isso ocorre somente se a chave tiver sido alterada e as vinculações de associação não tiverem sido executadas.

Exemplos:

As chaves estrangeiras são sincronizáveis?

document._syncable?(association)

Parâmetros:

Retorna:

  • (verdadeiro | falso)

    Se pudermos sincronizar.



21
22
23
# File 'lib/mongoid/association/referenced/syncable.rb', linha 21

def _syncable?(associação)
  !_synced?(associação.foreign_key) && enviar(associação.foreign_key_check)
end

#_synced ➤ Hash

Obtenha as chaves estrangeiras sincronizadas.

Exemplos:

Obtenha as chaves estrangeiras sincronizadas.

document._synced

Retorna:

  • (Hash)

    As chaves estrangeiras sincronizadas.



31
32
33
# File 'lib/mongoid/association/referenced/syncable.rb', linha 31

def _synced
  @_synced ||= {}
end

#_synced?(foreign_key) ➤ true | false

O documento foi sincronizado para a chave estrangeira?

Exemplos:

O documento foi sincronizado?

document._synced?

Parâmetros:

  • foreign_key (string)

    A chave estrangeira.

Retorna:

  • (verdadeiro | falso)

    Se pudermos sincronizar.



43
44
45
# File 'lib/mongoid/association/referenced/syncable.rb', linha 43

def _synced?(foreign_key)
  !!_synced[foreign_key]
end

#remove_inverse_keys(association) ➤ Object

Atualize as chaves inversas ao destruir.

Exemplos:

Atualize as chaves inversas.

document.remove_inverse_keys(association)

Parâmetros:

Retorna:

  • (Objeto)

    Os valores atualizados.



55
56
57
58
59
60
# File 'lib/mongoid/association/referenced/syncable.rb', linha 55

def remove_inverse_keys(associação)
  foreign_keys = enviar(associação.foreign_key)
  a menos que foreign_keys.nada? || foreign_keys.vazio?
    associação.critério(auto, foreign_keys).pull(associação.inverse_foreign_key => _id)
  end
end

#update_inverse_keys(association) ➤ Object

Atualize as chaves inversas para a associação.

Exemplos:

Atualize as chaves inversas

document.update_inverse_keys(association)

Parâmetros:

Retorna:

  • (Objeto)

    Os valores atualizados.



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

def update_inverse_keys(associação)
  se Previous_changes.has_key?(associação.foreign_key)
    antigo, Novo = Previous_changes[associação.foreign_key]
    adiciona, subs = Novo - (antigo || []), (antigo || []) - Novo

    # Se estivermos salvando automaticamente, não queremos que uma duplicata seja adicionada - o
    # $addToSet seria executado anteriormente e, em seguida, $push e $each do
    # inverso no salvamento automático causaria isso. Excluímos cada ID de
    # o que há na memória caso seja uma mistura de adição de ID e adição de objeto
    # ocorreu.
    se associação.autosave?
      enviar(associação.name).in_memory.cada fazer |doc|
        adiciona.delete_one(doc._id)
      end
    end

    a menos que adiciona.vazio?
      associação.critério(auto, adiciona).sem_opções.add_to_set(associação.inverse_foreign_key => _id)
    end
    a menos que subs.vazio?
      associação.critério(auto, subs).sem_opções.pull(associação.inverse_foreign_key => _id)
    end
  end
end