我有三個型號,用戶,地點,評級,具體如下:如何高效率,獲取平均評分模型的Rails中
class User < ActiveRecord::Base
has_many :ratings
end
class Venue < ActiveRecord::Base
has_many :ratings
end
class Rating < ActiveRecord::Base
belongs_to :user
belongs_to :venue
end
用戶能夠從0-5打分場地。用戶可以按照他們想要的頻率對場地進行評級,並且他們通常在相同的場地內相同的用戶在不同的分鐘內創建不同的評級。
我希望能夠提供的平均評級從過去一小時場地的,但我只希望從時間考慮每個用戶一個等級。因此,如果用戶在過去一小時內多次對同一場地進行評級,則只會計入他們最近的評級。
目前我有這樣的:
class Venue < ActiveRecord::Base
has_many :ratings
def past_hour_average
ratings = self.ratings.where(:created_at => 1.hour.ago..Time.now).uniq_by(&:user_id)
# loop through each record and compute average
sum = 0
ratings.each do |rating|
sum += rating.value
end
return sum/ratings.size
end
end
這種方法似乎效率不高但是。每次我想要一個場地的評分時,我都要計算它。 假設有很多用戶經常對單個場地進行評級,那麼計算平均評級的更好方法是什麼?
我不熟悉的軌道cacheing但會考慮。你也許沒有必要擔心負載。謝謝! – steve