我正在使用counter_cache計算投票數。用戶可以做一個upvote和downvote。使用計數器緩存在rails 4中使用upvote count
我的模型
vote.rb
attr_accessible :celebrity_id, :user_id, :vote_dvote
belongs_to :user
belongs_to :celebrity, counter_cache: true
celebrity.rb
attr_accessible :name, :gender, :category_id, :votes_count
belongs_to :user
belongs_to :category
has_many :votes
def total_upvotes
Vote.where('vote_dvote = ?', true).count
end
def percentage_of_votes
(self.votes_count.to_f/self.total_upvotes.to_f * 100.0).round(2)
end
控制器
def show_ranking
@celebrities = Celebrity.includes(:category).order(votes_count: :desc)
@celebrities.each do |celeb|
celeb["votes_count"] = celeb.percentage_of_votes
end
end
都給予好評,並downvote保存在投票表格,對給予好評「 vote_dvote = 1'和fo r downvote'vote_dvote = 0',每個名人的votes_count被保存在名人表中。在我的情況下發生的事情是投票數量超過了總投票數。所以我無法得到確切的百分比。
但我只需要upvote count。
但是upvotes和downvotes沒有插入名人表,我需要做什麼以外的事情 – Saravana
Classic counter_cache還依賴於已經插入到名人表中的votes_count。我只描述了counter_cache實際上可以執行的行爲,如果它可以與upvotes_count或downvotes_count一起使用。 –
我目前正在爲我的項目工作的另一個選項是使用Redis作爲緩存來存儲計算的數據,例如,在您的示例中,名人的upvotes的最後數量將被緩存,直到另一個upvotes被創建,該數字需要重新計算。 –