[英]Select records based off of an associated records count
我有三种模式:
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.
我的问题是,有没有更有效的方法来做到这一点? 有没有我可以写的查询,在数据库上不会如此详尽?
您可以在表之间使用joins
,并有条件地通过visit_details
表上的created_at
字段进行选择。 然后,您将获得查询返回的数组的大小:
Picture.joins(:visit => :visit_details).where('visit_details.created_at > ?', some_date)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.