ruby-on-rails - 在 Rails 中创建一个简单的计数器

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

我一直在尝试实现 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/

相关文章:

javascript - 脚踏式分页不适用于动态数据 Rails

php - 为什么 float 的打印方式如此不同?

ruby-on-rails - Ruby:如何向对象添加方法? (或者简单地扩展对象类)

python - 游戏的 flask 计数器

python - 如何计算列表中的多个项目

ruby-on-rails - 使用 EventMachine 的 Rails 应用程序是否可以进行长轮询?

ruby-on-rails - Rails remotipart gem,如何绑定(bind)到 ajax "progress"事件

mysql - ROR 初学者,为什么我的查询的一个版本有效,而另一个版本无效

ruby-on-rails - Rails 5 Heroku 部署错误:ExecJS::ProgramError: SyntaxError: 意外的 token :名称(autoRegisterNamespace)

Python for 循环在第一次迭代后返回零