rails 印象派如何找到 5 个最多查看项

rails impressionist how to find 5 of most view item

我使用此实例查找更多视图 5 项,但找不到结果。
可以教我怎么获得吗?

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

使用counter cache即可实现。在这种方法中,您必须为 model 创建一个新列并向您的模型添加一些配置。因此,gem 将自动更新观看次数。

或者,(未测试,但应该可以)

Item.joins(:impressions).group("impressions.impressionable_id").order("count(impression‌​s.id) DESC").first(5)

如果您使用的是 PostgreSQL,Emu 给出的答案将不起作用。有关说明,请参阅 here

ActiveRecord::StatementInvalid: PG::GroupingError: ERROR: column "items.id" must appear in the GROUP BY clause or be used in an aggregate function

只需添加 Item table 的主键列,一切正常!

Item.joins(:impressions).
     group("items.id, impressions.impressionable_id").
     order("count(impression‌​s.id) DESC").
     first(5)

在您的 CreatePosts 迁移中:

t.integer :visits, default: 0

在你的post.rb中:

is_impressionable counter_cache: true, column_name: :visits, :unique => :all

然后:

Post.order(visits: :asc).limit(5)

而且这个东西仍然可以在 post (Slim) 中呈现计数:

= post.impressionist_count

是的,这在 PostreSQL 中有效,并且在 activeadmin 中没有问题(对于 Dashboard 来说非常方便) 希望对你有帮助。