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

Recolhimento do Resumo do método de instância

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.

Exemplos:

Adicione o tocável.

Mongoid::Association::Referenced::CounterCache.define_callbacks!(association)

Parâmetros:

Retorna:

  • (Classe)

    A classe proprietário da associação.



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.

Exemplos:

Redefinir o cache do contador fornecido

post.reset_counters(:comments)

Parâmetros:

  • *counters (Símbolo...)

    Um ou mais caches de contador para redefinir.



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