Módulo: Mongoid::Association::Referenced::CounterCache

Ampliado por:
ActiveSupport::Concern
Incluido en:
Mongoid::Association
Definido en:
lib/mongoid/association/referenced/counter_cache.rb

Overview

Módulo mixin incluido en Mongoid::Document que añade la capacidad de almacenar en caché el recuento de documentos del lado opuesto en asociaciones n a muchos referenciadas.

Definido bajo Namespace

Modules: ClassMethods

Resumen del método de clase colapsar

Resumen del método de instancia colapsar

Detalles del método de clase

.define_callbacks!(asociación) ⇒ Clase

Este método forma parte de una API privada. Debe evitarlo si es posible, ya que podría eliminarse o modificarse en el futuro.

Agregue las devoluciones de llamadas responsables de actualizar el campo de caché del contador.

Ejemplos:

Agregar el touchable.

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

Parámetros:

Devuelve:

  • (Clase) -

    La clase propietaria de la asociación.



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
# Archivo 'lib/mongoid/association/referenced/counter_cache.rb', línea 99

def sí mismo.define_callbacks!(asociación)
  Nombre = asociación.Nombre
  cache_column = asociación.nombre_columna_cache_conteo.to_sym

  asociación.clase_inversa.tocar hacer |klass|
    klass.después de la actualización hacer
      foreign_key = asociación.foreign_key

      si enviar("#{clave_extranjera}_¿cambiado_previamente?")
        original, Actual = enviar("#{foreign_key}_anterior_change")

        a menos que original.nil?
          asociación.klass.con(persistence_context.for_child(asociación.klass)) hacer |clase|
            clase.decrement_counter(cache_column, original)
          end
        end

        si registro = __send__(Nombre)
          a menos que Actual.nil?
            registro[cache_column] = (registro[cache_column] || 0) + 1
            registro.clase.con(registro.persistence_context) hacer |clase|
              clase.incrementar_conteo(cache_column, Actual) si registro.¿persistió?
            end
          end
        end
      end
    end

    klass.after_create hacer
      si registro = __send__(Nombre)
        registro[cache_column] = (registro[cache_column] || 0) + 1

        si registro.¿persistió?
          registro.clase.con(registro.persistence_context) hacer |clase|
            clase.incrementar_conteo(cache_column, registro._id)
          end
          registro.eliminar_cambio(cache_column)
        end
      end
    end

    klass.before_destroy hacer
      si registro = __send__(Nombre)
        registro[cache_column] = (registro[cache_column] || 0) - 1 a menos que registro.frozen?

        si registro.¿persistió?
          registro.clase.con(registro.persistence_context) hacer |clase|
            clase.decrement_counter(cache_column, registro._id)
          end
          registro.eliminar_cambio(cache_column)
        end
      end
    end
  end
end

Detalles del método de instancia

#reset_counters(*counters) ⇒ Object

Restablezca el contador dado usando el .count() query desde la base de datos. Este método es útil en caso de que un contador esté dañado o se haya añadido un nuevo contador a la colección.

Ejemplos:

Restablece la caché de contador indicada

post.reset_counters(:comments)

Parámetros:

  • *contadores (Symbol...)

    Una o más memorias caché de contador que se deben restablecer.



22
23
24
25
26
# Archivo 'lib/mongoid/association/referenced/counter_cache.rb', línea 22

def reset_counters(*contadores)
  sí mismo.clase.con(persistence_context) hacer |clase|
    clase.reset_counters(sí mismo, *contadores)
  end
end