使用Ruby 1.9.2,Rails 3.1。我有以下代碼:在Rails中重構此方法以防止SQL查詢運行兩次
# review.rb
def calculate_rating(reviewable)
total_rating = Review.select("rating").where(:reviewable_id => self.reviewable_id)
sum_rating = total_rating.sum(:rating)
new_rating_average = sum_rating.to_f/total_rating.size
reviewable.update_attribute(:rating_average, new_rating_average)
end
total_rating
實際使用獲得的評分數量的總計數退回,而sum_rating
用來總結各total_rating
。我注意到我的查詢被多次運行以實現結果。
有什麼辦法可以重構這個來提高性能嗎?
謝謝。
OMG,我不能更多感謝第一個SQL語句! – Victor 2011-12-19 17:32:09