私がしようとしているのは、過去 7 日間のインプレッション数 (誰かが投稿を表示したときにインプレッションが作成されます) で投稿を並べ替えることだけです。これは私の名前付きスコープです
scope :popular_last_week, unscoped
.select("websites.*, COUNT(impressions.id) AS counted_impressions")
.joins("INNER JOIN impressions ON websites.id = impressions.impressionable_id")
.where("impressions.created_at >= ?", 7.days.ago)
.where(:is_published => true)
.group("websites.id")
.order("counted_impressions DESC")
(「counted_impressions」は、ポスト レコードでの競合を避けるために使用されます)
ただし、これにより次の無効な SQL が生成されます (counted_impressions は有効な列ではありません)。
SELECT COUNT(*) AS count_all, websites.id AS websites_id FROM "websites" INNER JOIN impressions ON websites.id = impressions.impressionable_id WHERE "websites"."is_published" = 't' AND (impressions.created_at >= '2013-01-11 17:48:03.954542') GROUP BY websites.id ORDER BY counted_impressions
selectステートメントは無視されているようです。どこが間違っているのか、または SQL ステートメントが次のようになるようにするにはどうすればよいですか。
SELECT websites.*, COUNT(impressions.id) AS counted_impressions FROM "websites" INNER JOIN impressions ON websites.id = impressions.impressionable_id
WHERE "websites"."is_published" = 't' AND (impressions.created_at >= '2013-01-11 17:42:57.771777') GROUP BY websites.id ORDER BY counted_impressions DESC