0

私は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.

私の質問は、これを行うためのより効率的な方法はありますか? データベース上でそれほど網羅的ではない、作成できるクエリはありますか?

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 に答える