在Rails中创建一个简单的命中计数器

时间:2013-09-03 21:30:04

标签: ruby-on-rails ruby counter visitor-statistic impressions

我一直在尝试实现gem Impressionist,但由于文档令人困惑,而且宝石对我的简单用例带来了一些开销,我想知道如何自己实现这个?

  • 我想跟踪控制器中某个操作的展示次数(请求)。

  • 展示不必由唯一身份访问者注册。

  • 我需要计数器对于模型中的每个记录都是唯一的(即商店1:34次点击,商店2:77点击等)。

  • 此计数器不应包含此列表中机器人的请求:http://www.user-agents.org/allagents.xml

完成上述操作所需的最小代码是什么?

更新

为了澄清,如果可能,我想要使用宝石印象派。我只用这个作为前奏来描述我想要解决的问题。

1 个答案:

答案 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,所以使用它应该是安全的。

使用此站点中的列表需要您向该列表添加缓存,如果它旨在成为一个简单的功能,则可能会在代码中添加不必要的复杂性。