3

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

  • 我想跟踪控制器中某个操作的印象(请求)。

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

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

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

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

更新

澄清一下,如果可能的话,我不想使用宝石印象派。我只是用它作为前奏来描述我要解决的问题。

4

1 回答 1

2

您需要为模型添加一个属性。

如果您使用 Impressionsit gem,您应该使用内置的迁移生成器将正确的方案添加到您的数据库中。

否则,如果您不打算使用此 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

它甚至不使用您提供的列表以避免开销。但是,大多数机器人在他的用户代理中都有一个 url 来识别 then,所以使用它应该是安全的。

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

于 2013-09-03T21:52:38.473 回答