我一直在尝试实现 gem Impressionist ,但由于文档令人困惑,并且 gem 为我的简单用例带来了一些开销,我想知道如何自己实现它?
我想跟踪 Controller 中特定操作的印象(请求)。
展示次数不必由唯一身份访问者记录。
我需要模型中每条记录的计数器都是唯一的(即商店 1:34 次点击,商店 2:77 次点击等)。
计数器不应包含来自此列表中机器人的请求:http://www.user-agents.org/allagents.xml
完成上述任务所需的最少代码是多少?
更新
澄清一下,如果可能的话,我不想使用 gem 印象派。我只是以此作为序曲来描述我要解决的问题。
最佳答案
您需要向您的模型添加一个属性。
如果您正在使用 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 ,所以使用它应该是安全的。
使用此站点的列表需要您向该列表添加缓存,如果它的目标是成为一个简单的功能,这可能会在您的代码中增加不必要的复杂性。
关于ruby-on-rails - 在 Rails 中创建一个简单的计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18601820/