0

我有三个模型:

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.

我的问题是,有没有更有效的方法来做到这一点?是否有一些我可以编写的查询不会在数据库上详尽无遗?

4

1 回答 1

1

您可以在表格之间使用,并通过表格上的字段joins有条件地选择。然后你得到查询返回的数组的大小: created_atvisit_details

Picture.joins(:visit => :visit_details).where('visit_details.created_at > ?', some_date)
于 2013-09-13T17:10:07.037 回答