每次点击"Detail"链接,viewed_count 计数器加 1,然后在 index 页面上显示出来
Controller
def show
@patient = Patient.find(params[:id])
@patient.view!
end
Model
def view!
if self.viewed_count.nil?
self.viewed_count = 1
else
self.viewed_count += 1
end
end
计数器就停留在 1 上面就不动了。。。
大家帮帮忙,看看我哪里错了!
数据库创建的时候建议给个默认值 0,然后可以用
def show
@patient = Patient.find(params[:id])
@patient.increment!(:view_count)
end
#10 楼 @quakewang 正解. 除去代码写法外,计数类的一定要考虑到对数据库性能影响。 有两种方案:
#11 楼 @WilliamZhu Good!如果因为这个用上 Redis 有点未免太重,简单的在内存里 cache 下,定时 increase 到数据库中就好了,不过这样有部分数据丢失的风险,比如服务重启。
Patient.update_counters @patient.id, :viewed_count => 1
http://apidock.com/rails/ActiveRecord/CounterCache/update_counters