私のアプリケーションでは、過去 10 日間のビューでアイテムを並べ替えようとしています。Impressionist gem を使用しています。これは、impression というモデルを作成し、すべてのビューをここに記録します。
私はこのコードにたどり着きました:
@items = Item.joins("left join impressions on impressions.impressionable_id = items.id and impressions.impressionable_type = 'Item'")
.select("count(distinct(ip_address)) as counter, impressionable_id, items.title, items.id, items.image")
.group('items.id')
.order("counter desc")
.page(params[:page])
.per_page(9)
これにより、合計ユニーク ビュー数でアイテムが並べ替えられます。ただし、過去 10 日間に発生したインプレッションのみをカウントしたいと考えています。where
これにより、次のようなメソッドを追加することになりました。
time_range = (Time.now - 10.days)..Time.now
@items = Item.joins("left join impressions on impressions.impressionable_id = items.id and impressions.impressionable_type = 'Item'")
.select("count(distinct(ip_address)) as counter, impressionable_id, items.title, items.id, items.image")
.where('impressions.created_at' => time_range)
.group('items.id')
.order("counter desc")
.page(params[:page])
.per_page(9)
ただし、これはビューのないアイテムを除外します。これは私が望むものではありません。これらは 0 ビューで表す必要があります。
この問題を解決する方法について何か提案はありますか?