Pregunta

Esta es una pregunta complicada.

Tengo un proyecto con múltiples tipos de contenido, como artículo, revisión, etc. Cada tipo de contenido tiene comentarios, los comentarios son polimórficos, ya que pueden pertenecer a cualquier tipo de contenido.

Quiero poner un contador de comentarios totales en todas mis páginas de contenido para mostrar cuántos comentarios hay, e implementé un contador para hacer esto. (Algo como @Artículo.comments.Count es más consultas, y como estoy usando la gema de ascendencia para comentarios enhebrados, los comentarios de los niños no se cuentan en ese número, solo los raíz).

El caché del mostrador funciona muy bien y muestra el número preciso de comentarios, pero como siempre hay una pequeña captura. Los comentarios no siempre se publican de inmediato, solo los usuarios registrados pueden publicar inmediatamente, y estos comentarios tienen un: estado de '2'. Los usuarios no registrados se ponen en la cola de moderación; Estos comentarios tienen un: estado de '1'.

El problema es que el contador caché los cuenta de todos modos, por lo que si tiene cuatro comentarios en moderación y un comentario aprobado, el recuento total es 5.

¿Hay alguna manera de agregar una excepción al caché del mostrador para decirle que no se incrementa si el comentario. El estado no es '2'? Del mismo modo, cuando está en el backend en el recurso de comentarios y establece ese comentario para publicar (dándole el estado de 2), ¿hay alguna manera (modelo, controlador o de otra manera) para hacer que el contador de contador para su incremento de tipo polimórfico / de contenido asociado?

Comentarios.RB

 # Comments
 has_many :comments, :as => :commentable, :dependent => :destroy
 accepts_nested_attributes_for :comments

Artículo.RB

belongs_to :commentable, :polymorphic => TRUE, :touch => TRUE, :counter_cache => TRUE 
¿Fue útil?

Solución

Lo que puedo pensar en este momento es que deba proporcionar sus propias columnas de caché en el modelo y el incremento/disminución según sea necesario. es decir

active_comments_count
pending_comments_count

Luego, en su modelo, puede activar su update_comment_count Método a través de un llamar de vuelta.

Es más un esfuerzo de tu lado, pero estoy seguro de que este enfoque funcionará.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top