1

このインスタンスを使用してさらにビュー 5 アイテムを見つけましたが、結果を取得できません。
入手方法を教えていただけないでしょうか?

 @test = Item.limit(5).joins(:impressions).group("impressions.impressionable_id").order("count(impressions.impressionable_id) DESC")
4

3 に答える 3

0

PostgreSQL を使用している場合、Emu からの回答は機能しません。説明はこちらをご覧ください。

ActiveRecord::StatementInvalid: PG::GroupingError: エラー: 列 "items.id" は GROUP BY 句に表示されるか、集計関数で使用する必要があります

テーブルの主キー列を追加するだけでItem、すべてが機能するはずです!

Item.joins(:impressions).
     group("items.id, impressions.impressionable_id").
     order("count(impression‌​s.id) DESC").
     first(5)
于 2016-06-18T07:15:09.953 に答える
0

カウンターキャッシュを使用して実現できます。このアプローチでは、新しい列を作成modelし、モデルに構成を追加する必要があります。したがって、gem はビュー カウントを自動的に更新します。

または、(テストされていませんが、動作するはずです)

Item.joins(:impressions).group("impressions.impressionable_id").order("count(impression‌​s.id) DESC").first(5)
于 2016-06-18T06:18:55.660 に答える