このインスタンスを使用してさらにビュー 5 アイテムを見つけましたが、結果を取得できません。
入手方法を教えていただけないでしょうか?
@test = Item.limit(5).joins(:impressions).group("impressions.impressionable_id").order("count(impressions.impressionable_id) DESC")
このインスタンスを使用してさらにビュー 5 アイテムを見つけましたが、結果を取得できません。
入手方法を教えていただけないでしょうか?
@test = Item.limit(5).joins(:impressions).group("impressions.impressionable_id").order("count(impressions.impressionable_id) DESC")
PostgreSQL を使用している場合、Emu からの回答は機能しません。説明はこちらをご覧ください。
ActiveRecord::StatementInvalid: PG::GroupingError: エラー: 列 "items.id" は GROUP BY 句に表示されるか、集計関数で使用する必要があります
テーブルの主キー列を追加するだけでItem
、すべてが機能するはずです!
Item.joins(:impressions).
group("items.id, impressions.impressionable_id").
order("count(impressions.id) DESC").
first(5)
カウンターキャッシュを使用して実現できます。このアプローチでは、新しい列を作成model
し、モデルに構成を追加する必要があります。したがって、gem はビュー カウントを自動的に更新します。
または、(テストされていませんが、動作するはずです)
Item.joins(:impressions).group("impressions.impressionable_id").order("count(impressions.id) DESC").first(5)