我使用此实例查找更多视图 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")
在您的 CreatePosts 迁移中:
t.integer :visits, default: 0
在您的 post.rb 中:
is_impressionable counter_cache: true, column_name: :visits, :unique => :all
然后:
Post.order(visits: :asc).limit(5)
这个东西仍然适用于在你的帖子中渲染计数(Slim):
= post.impressionist_count
是的,这在 PostreSQL 中有效,并且对 activeadmin 没有问题(对于仪表板来说非常方便)希望它有所帮助。
可以使用计数器缓存来实现。在这种方法中,您必须为您的模型创建一个新列并向您model
的模型添加一些配置。因此,gem 会自动更新查看次数。
或者,(未测试,但应该可以)
Item.joins(:impressions).group("impressions.impressionable_id").order("count(impressions.id) DESC").first(5)
如果您使用的是 PostgreSQL,Emu 给出的答案将不起作用。请参阅此处了解说明。
ActiveRecord::StatementInvalid: PG::GroupingError: ERROR: column "items.id" 必须出现在 GROUP BY 子句中或在聚合函数中使用
只需添加表的主键列,Item
一切都应该工作!
Item.joins(:impressions).
group("items.id, impressions.impressionable_id").
order("count(impressions.id) DESC").
first(5)