私は User and Post モデルを持っており、acts_as_votable gem (「投票」テーブルを提供します) を使用して、投稿に賛成票/反対票を投じています。各ユーザーにカルマを割り当てたいと思います。カルマは、ユーザーがすべての投稿から得た賛成票の数から反対票の総数を引いたものです。
現在、カルマを計算するために、ユーザーのモデルにこのインスタンス メソッドがあります。
def karma
count = 0
self.posts.each do |post|
count += post.upvotes.size - post.downvotes.size
end
return count
end
上記は実行時間が O(2n) の場合、あまり効率的ではないと思います。投稿ごとに、プラス投票用とマイナス投票用の 2 つの追加データベース クエリが必要になるためです。
上記を単一のクエリに組み合わせる方法、またはより効率的にする方法についてのアイデアはありますか?