我有三个模型:
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.
我的问题是,有没有更有效的方法来做到这一点?是否有一些我可以编写的查询不会在数据库上详尽无遗?