Ruby 1.9.2、Rails 3.1を使用します。私は、次のコードをしている:Railsでこのメソッドをリファクタリングして、SQLクエリが2回実行されないようにします。
# 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
を合計するために使用されるのに対し、評価の数の合計数が、返さ取得するために使用されます。結果を達成するために、クエリが複数回実行されることに気付きました。
これをリファクタリングしてパフォーマンスを向上させる方法はありますか?
ありがとうございました。あなたは平均的な機能が存在しなかった場合、あなたは可能性たとえば、カスタムSQL記述する必要があるかもしれないより一般的に
average_rating = Review.where(:reviewable_id => self.reviewable_id).average(:rating)
を行うことができるはずので
OMG、私がすることはできません最初のSQLステートメントでもっと感謝しています! – Victor