Domanda

Questa è una domanda difficile.

Ho un progetto con più tipi di contenuti, come articolo, revisione, ecc. Ogni tipo di contenuto ha commenti, i commenti sono polimorfici in quanto possono appartenere a qualsiasi tipo di contenuto.

Voglio mettere un contatore di commenti totali su tutte le mie pagine di contenuti per mostrare quanti commenti ci sono e ho implementato una cache per farlo. (Qualcosa come @Article.comments.count è più domande e mentre sto usando la gemma ancestrica per i commenti thread, i commenti del bambino non vengono conteggiati in quel numero, solo quelli root.)

La contro -cache funziona alla grande e mostra il numero accurato di commenti, ma come sempre c'è un piccolo problema. I commenti non sono sempre pubblicati immediatamente, solo gli utenti registrati possono immediatamente pubblicare e questi commenti hanno uno stato di "2". Gli utenti non registrati vengono messi nella coda di moderazione; Questi commenti hanno uno status di "1".

Il problema è che il contropiede li conta allo stesso modo, quindi se hai quattro commenti con moderazione e un commento approvato, il conteggio totale è 5.

C'è un modo per aggiungere un'eccezione al bancone per dirgli di non incrementare se il commento.status non è "2"? Allo stesso modo, quando nel backend nella risorsa dei commenti e l'impostazione di quel commento per pubblicare (dandolo stato di 2), esiste un modo allora (modello, controller o altro) per creare la cache per il suo incremento di tipo polimorfico / contenuto associato?

commenti.rb

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

Articolo.RB

belongs_to :commentable, :polymorphic => TRUE, :touch => TRUE, :counter_cache => TRUE 
È stato utile?

Soluzione

Quello a cui riesco a pensare al momento è che potresti dover fornire le tue colonne di contropiede nel modello e incremento/decremento come richiesto. cioè

active_comments_count
pending_comments_count

Quindi nel tuo modello, puoi attivare il tuo update_comment_count metodo tramite a richiama.

È più uno sforzo dalla tua parte, ma sono sicuro che questo approccio funzionerà.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top