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.



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

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.



28
29
30
# File 'lib/mongoid/association/referenced/syncable.rb', linha 28

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.



40
41
42
# File 'lib/mongoid/association/referenced/syncable.rb', linha 40

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.



52
53
54
55
56
57
# File 'lib/mongoid/association/referenced/syncable.rb', linha 52

def remove_inverse_keys(associação)
  foreign_keys = enviar(associação.foreign_key)
  Método se foreign_keys.nada? || foreign_keys.vazio?

  associação.critério(auto, foreign_keys).pull(associação.inverse_foreign_key => _id)
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.



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

def update_inverse_keys(associação)
  Método a menos que 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
  Método se subs.vazio?

  associação.critério(auto, subs).sem_opções.pull(associação.inverse_foreign_key => _id)
end