【问题标题】:Creating a simple hit counter in Rails在 Rails 中创建一个简单的计数器
【发布时间】:2013-09-03 21:30:04
【问题描述】:

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

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

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

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

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

完成上述任务所需的最少代码是多少?

更新

澄清一下,如果可能的话,我想使用 gem Impressionist。我只是用它作为前奏来描述我要解决的问题。

【问题讨论】:

  • 你想使用印象派gem,还是想自己实现gem?

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


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

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

【讨论】:

    猜你喜欢
    • 2013-09-09
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 2014-10-25
    相关资源
    最近更新 更多