Módulo: Mongoid::Association::Referenced::CounterCache
- Estendido por:
- ActiveSupport::Concern
- Incluído em:
- Mongoid::Associação
- Definido em:
- lib/mongoid/association/referenced/counter_cache.rb
Visão geral
Módulo Mixin incluído no Mongoid::Document que adiciona a capacidade de armazenar em cache a contagem de documentos do lado oposto em associações n-to-many referenciadas.
Definido sob namespace
Módulos: Métodos de classe
Recolhimento do Resumo do método de classe
-
.define_callbacks!(associação) ➤ Classe
privado
Adicione as chamada de resposta responsáveis pela atualização do campo de cache do contador.
Recolhimento do Resumo do método de instância
-
#reinício_counters(*counters) ➤ Objeto
Redefinir o contador fornecido usando o .count() query do banco de dados.
Detalhes do método de classe
.define_callbacks!(associação) ➤ Classe
Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.
Adicione as chamada de resposta responsáveis pela atualização do campo de cache do contador.
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
# File 'lib/mongoid/association/referenced/counter_cache.rb', linha 99 def auto.define_callbacks!(associação) name = associação.name cache_column = associação.counter_cache_column_name.to_sym associação.inverse_class.toque fazer |classe| classe.after_update fazer foreign_key = associação.foreign_key se enviar("#{foreign_key}_previously_changed?") Original, Current = enviar("#{foreign_key}_previous_change") a menos que Original.nada? associação.classe.com(persistence_context.for_child(associação.classe)) fazer |_class| _class.decrement_counter(cache_column, Original) end end se registro = __send__(name) a menos que Current.nada? registro[cache_column] = (registro[cache_column] || 0) + 1 registro.classe.com(registro.persistence_context) fazer |_class| _class.incremento_counter(cache_column, Current) se registro.persistiu? end end end end end classe.after_create fazer se registro = __send__(name) registro[cache_column] = (registro[cache_column] || 0) + 1 se registro.persistiu? registro.classe.com(registro.persistence_context) fazer |_class| _class.incremento_counter(cache_column, registro._id) end registro.remove_change(cache_column) end end end classe.before_destroy fazer se registro = __send__(name) registro[cache_column] = (registro[cache_column] || 0) - 1 a menos que registro.congelado? se registro.persistiu? registro.classe.com(registro.persistence_context) fazer |_class| _class.decrement_counter(cache_column, registro._id) end registro.remove_change(cache_column) end end end end end |
Detalhes do método de instância
#reinício_counters(*counters) ➤ Objeto
Redefinir o contador fornecido usando o .count() query do banco de dados. Este método é útil caso um contador tenha sido corrompido ou um novo contador tenha sido adicionado à coleção.
22 23 24 25 26 |
# File 'lib/mongoid/association/referenced/counter_cache.rb', linha 22 def reinício_contadores(*Contadores) auto.classe.com(persistence_context) fazer |_class| _class.reinício_contadores(auto, *Contadores) end end |