私は3つのモデルを持っています:
class Picture < ActiveRecord::Base
# fields: url
has_one :visit
end
class Visit < ActiveRecord::Base
# fields: total_visits
belongs_to :picture
end
class VisitDetail < ActiveRecord::Base
#fields: ip_address
has_many :visits
end
時間枠に基づいて最も多くのビューを持つすべての写真を選択するクエリを作成したいと考えています。たとえば、先週最も多く閲覧された写真をすべて取得したいとします。VisitDetail
現在、先週、一か月などに作成されたすべてのレコードをループして、それぞれVisitDetail
を合計してVisit
記録しています。
hash = { }
VisitDetail.where("created_at >= ?").each do |record|
if record.visit
if hash.key? record.visit.picture_id
hash[record.visit.picture_id] += 1
else
hash[record.visit.picture_id] = 1
end
end
end
# With my hash, I then order the hash appropriately and query
# for the pictures based on the key values in the hash which
# represent individual picture ids.
私の質問は、これを行うためのより効率的な方法はありますか? データベース上でそれほど網羅的ではない、作成できるクエリはありますか?