上一篇文章我们已经说明了如何最简单地使用gem’impressionist‘,但是后来直接使用impressionist_count这个数据进行排序,就会出现报错,因此,我们要找到方法来通过访问量排序
该文章主要参考https://linuxtut.com/en/bec2040f766fc7b079a0/
由于我们使用的对象model是Widget,
所以,第一步
$ rails g migration AddImpressionsCountToWidgets impressions_count:integer
打开db/migrate/20210805062800_add_impressions_count_to_widgets(根据不同日期显示不同的数字)
class AddImpressionsCountToWidgets < ActiveRecord::Migration[5.2]
def change
# 「default:Added "0"
add_column :widgets, :impressions_count, :integer, default: 0
end
end
$ rails db:migrate
在model文件Widget.rb里添加
is_impressionable
+ is_impressionable counter_cache: true
这里本人测试的时候,需要在is_impressionable 这一行下面额外添加is_impressionable counter_cache: true,否则无法更新阅读数量,不知道在不同版本会不会有不同,暂未经过更多测试。
然后在需要显示排序的controller controllers/widget_controller.rb
def index
@widgets = Widget.all.order("impressions_count DESC")
end
这样就可以在index页面里,根据访问量从大到小排序了,需要从小到大排序的话就删掉DESC即可