gpt4 book ai didi

ruby-on-rails - Rails 中页面浏览量的简单点击计数器

转载 作者:行者123 更新时间:2023-12-03 07:36:55 26 4
gpt4 key购买 nike

我找到了解决这个问题的几种解决方案,例如这篇文章中的railstat:

Page views in Rails

我有很多文章和评论,我想要一个按唯一 IP 过滤的点击计数器。就像 Stackoverflow 对这篇文章所做的那样。但我并不真正关心像railstat这样的解决方案,因为谷歌分析已经为我做到了这一点,并包括大量代码,跟踪唯一的IP等。我目前的想法是使用Garb或其他一些分析如果页面统计数据早于 12 小时更新某​​些表,则用于提取页面统计信息的插件,但我还需要一个缓存列。

我假设您可以从 Analytics 中提取特定页面的统计信息,并且他们每 12 小时更新一次统计信息?

我想知道是否有任何原因表明这是一个坏主意,或者是否有人有更好的解决方案?

谢谢

最佳答案

更新

此答案中的代码用作 http://github.com/charlotte-ruby/impressionist 的基础尝试一下

<小时/>

与使用 API 从 Analytics 中提取数据相比,将其编码到应用程序中可能会花费更少的时间。此数据很可能会更准确,并且您不必依赖外部依赖项。您还可以实时获得统计数据,而不是等待 12 小时分析数据。 request.remote_ip 效果很好。这是使用多态性的解决方案。请注意,此代码未经测试,但应该接近。

创建新模型/迁移来存储您的页面浏览量(展示次数):

class Impressions < ActiveRecord::Base
belongs_to :impressionable, :polymorphic=>true
end

class CreateImpressionsTable < ActiveRecord::Migration
def self.up
create_table :impressions, :force => true do |t|
t.string :impressionable_type
t.integer :impressionable_id
t.integer :user_id
t.string :ip_address
t.timestamps
end
end

def self.down
drop_table :impressions
end
end

向您的文章模型中添加一行以进行关联,并添加一个方法来返回展示次数:

class Article < ActiveRecord::Base
has_many :impressions, :as=>:impressionable

def impression_count
impressions.size
end

def unique_impression_count
# impressions.group(:ip_address).size gives => {'127.0.0.1'=>9, '0.0.0.0'=>1}
# so getting keys from the hash and calculating the number of keys
impressions.group(:ip_address).size.keys.length #TESTED
end
end

在显示操作上为articles_controller创建before_filter:

before_filter :log_impression, :only=> [:show]

def log_impression
@article = Article.find(params[:id])
# this assumes you have a current_user method in your authentication system
@article.impressions.create(ip_address: request.remote_ip,user_id:current_user.id)
end

然后您只需在 View 中调用 unique_impression_count

<%=@article.unique_impression_count %>

如果您在一堆模型上使用它,您可能需要将其干燥。将 before_filter def 放入 application_controller 并使用动态内容,例如:

impressionable_class = controller_name.gsub("Controller","").constantize
impressionable_instance = impressionable_class.find(params[:id])
impressionable_instance.impressions.create(ip_address:request.remote_ip,user_id:current_user.id)

还将 Article 模型中的代码移动到将包含在 ActiveRecord::Base 中的模块中。您可以将发送包含在配置/初始化程序中..或者如果您想变得疯狂,只需将整个事情变成 Rails 引擎,这样您就可以在其他应用程序上重用。

module Impressionable
def is_impressionable
has_many :impressions, :as=>:impressionable
include InstanceMethods
end
module InstanceMethods
def impression_count
impressions.size
end

def unique_impression_count
impressions.group(:ip_address).size
end
end
end

ActiveRecord::Base.extend Impressionable

关于ruby-on-rails - Rails 中页面浏览量的简单点击计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4815713/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com