将Geocoder gem 添加到您的 Gemfile 和bundle install
.
创建Visit
具有属性page
和ip_address
的模型location
。
对于有问题的页面,在相关控制器中放置一个前置过滤器,或者如果您想记录对每个页面的访问,请将其放置在您的 ApplicationController 中:
def record_visit
Visit.create(page: request.fullpath, ip_address: request.ip, location: request.location.country_code)
end
Geocoder gem 将该location
方法添加到请求对象中,因此如果您需要的不仅仅是国家/地区代码,请阅读文档。
然后,您可以通过将以下内容插入控制器来显示特定页面上的视图数量,再次在 before_filter 中,但这必须在前一个过滤器之后运行:
def count_views
@views = Visit.where(page: request.fullpath).count
end
由于您将经常运行此查询,因此您可能希望在创建访问模型时在页面属性上放置一个索引。
add_index :visits, :page
唯一视图很棘手,因为您当然可以有来自同一 IP 地址的多个访问者。您可以将 cookie 设置为record_visit
方法的一部分,然后如果 cookie 存在,则不创建新访问。
def record_visit
if cookies['app-name-visited']
return
else
cookies['app-name-visited'] = true
Visit.create(page: request.fullpath, ip_address: request.ip, location: request.location.country_code)
end
end