質問

これは難しい質問です。

記事、レビューなど、複数のコンテンツタイプを備えたプロジェクトがあります。各コンテンツタイプにはコメントがあり、コメントはあらゆるコンテンツタイプに属する可能性があるため、ポリ型です。

すべてのコンテンツページに合計コメントカウンターを配置して、コメントの数を示し、これを行うためにカウンターキャッシュを実装しました。 ( @article.comments.countのようなものはより多くのクエリであり、スレッドコメントのために祖先の宝石を使用しているので、子のコメントはその数でカウントされず、ルートのコメントだけです。)

カウンターキャッシュはうまく機能し、正確な数のコメントを表示しますが、いつものように少しキャッチがあります。コメントは常にすぐに公開されるわけではなく、登録されたユーザーのみがすぐに公開でき、これらのコメントには「2」のステータスがあります。未登録のユーザーは、モデレートキューに入れられます。これらのコメントには、「1」のステータスがあります。

問題は、カウンターキャッシュがすべて同じカウントされるため、適度に4つのコメントがあり、1つの承認されたコメントがある場合、合計カウントは5です。

COMMENT.STATUSが「2」ではない場合にインクリメントしないように指示するために、カウンターキャッシュに例外を追加する方法はありますか?同様に、コメントリソースのバックエンドで、そのコメントを公開するためのコメント(ITステータスを2のステータス)に設定すると、関連する多型 /コンテンツタイプの増分のカウンターキャッシュを作成する方法(モデル、コントローラーなど)がありますか?

comments.rb

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

article.rb

belongs_to :commentable, :polymorphic => TRUE, :touch => TRUE, :counter_cache => TRUE 
役に立ちましたか?

解決

私が現時点で考えることができるのは、モデルに独自のカウンターキャッシュ列を提供し、必要に応じて増分/減少を提供する必要があるかもしれません。すなわち

active_comments_count
pending_comments_count

その後、モデルでは、トリガーできます update_comment_count aを介した方法 折り返し電話.

それはあなたの側でのより多くの努力ですが、私はこのアプローチがうまくいくと確信しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top