我一直在尝试实现gem Impressionist,但由于文档令人困惑,而且宝石对我的简单用例带来了一些开销,我想知道如何自己实现这个?
我想跟踪控制器中某个操作的展示次数(请求)。
展示不必由唯一身份访问者注册。
我需要计数器对于模型中的每个记录都是唯一的(即商店1:34次点击,商店2:77点击等)。
此计数器不应包含此列表中机器人的请求:http://www.user-agents.org/allagents.xml
完成上述操作所需的最小代码是什么?
更新
为了澄清,如果可能,我不想要使用宝石印象派。我只用这个作为前奏来描述我想要解决的问题。
答案 0 :(得分:1)
您需要为模型添加属性。
如果您使用的是Impressionsit gem,则应use the built-in migration generator将正确的方案添加到数据库中。
否则,如果您没有计划使用此gem,则需要创建如下的迁移:
MyMigration < ActiveRecord::Migration
def change
add_column :pluralized_model_eg_users, :integer, default: 0
end
end
然后,在您要计算的操作上,使用代码:
unless request.env["HTTP_USER_AGENT"].match(/\(.*https?:\/\/.*\)/)
@model.update_attribute :impressions, @model + 1
end
它不会使用您提供的列表来避免开销。但是,most robots have an url in his user agent to identify then,所以使用它应该是安全的。
使用此站点中的列表需要您向该列表添加缓存,如果它旨在成为一个简单的功能,则可能会在代码中添加不必要的复杂性。