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

Ampliado por:
ActiveSupport::Preocupación
Incluido en:
Mongoid::Asociación
Definido en:
lib/mongoid/association/referenced/counter_cache.rb

Overview

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

Definido en el espacio de nombres

Modules: Métodos de clase

Colapso delresumen del método de clase

Colapso del resumen del método de instancia

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:

Añade lo tangible.

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 yo.¡define_callbacks!(asociación)
  Nombre = asociación.Nombre
  columna_caché = asociación.nombre_de_columna_de_caché_de_contador.a_sym

  asociación.clase inversa.grifo hacer |klass|
    klass.después de la actualización hacer
      clave externa = asociación.clave externa

      Si Enviar("#{clave_extranjera}_¿cambiado_previamente?")
        Texto original en, actual = Enviar("#{foreign_key}_anterior_change")

        a no ser que Texto original en.nil?
          asociación.klass.con(contexto de persistencia.para_niño(asociación.klass)) hacer |_class|
            _class.contador_decremento(columna_caché, Texto original en)
          end
        end

        Si registro = __enviar__(Nombre)
          a no ser que actual.nil?
            registro[columna_caché] = (registro[columna_caché] || 0) + 1
            registro.clase.con(registro.contexto de persistencia) hacer |_class|
              _class.contador_de_incrementos(columna_caché, actual) Si registro.¿persistió?
            end
          end
        end
      end
    end

    klass.después de crear hacer
      Si registro = __enviar__(Nombre)
        registro[columna_caché] = (registro[columna_caché] || 0) + 1

        Si registro.¿persistió?
          registro.clase.con(registro.contexto de persistencia) hacer |_class|
            _class.contador_de_incrementos(columna_caché, registro._id)
          end
          registro.eliminar_cambio(columna_caché)
        end
      end
    end

    klass.antes de destruir hacer
      Si registro = __enviar__(Nombre)
        registro[columna_caché] = (registro[columna_caché] || 0) - 1 a no ser que registro.frozen?

        Si registro.¿persistió?
          registro.clase.con(registro.contexto de persistencia) hacer |_class|
            _class.contador_decremento(columna_caché, registro._id)
          end
          registro.eliminar_cambio(columna_caché)
        end
      end
    end
  end
end

Detalles del método de instancia

#reset_counters(*contadores) ⇒ Objeto

Restablezca el contador dado mediante la consulta .count() desde la base de datos. Este método es útil si un contador se corrompió o se agregó uno nuevo a la colección.

Ejemplos:

Restablecer el caché del contador indicado

post.reset_counters(:comments)

Parámetros:

  • *contadores (Symbol...)

    Uno o más cachés de contador para reiniciar.



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

def restablecer_contadores(*contadores)
  yo.clase.con(contexto de persistencia) hacer |_class|
    _class.restablecer_contadores(yo, *contadores)
  end
end