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(impressions.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(impressions.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 来说非常方便)
希望对你有帮助。
我使用此实例查找更多视图 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(impressions.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(impressions.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 来说非常方便) 希望对你有帮助。