Railsでページビュー(PV)をとるならimpressionist
https://github.com/charlotte-ruby/impressionist
「ブログ記事ごとのPVがとりたい!」がカンタンに実現できるgem。PV記録用のテーブルを別途作ってそこにアクセスを記録してくれる。
とりまGemfileに設定追加してbundle installからのmigrateで。
Gemfile
gem 'impressionist', '~> 1.5.1'
$ bundle install
$ bundle exec rails g impressionist
$ bundle exec rake db:migrate
あとは、カウントしたいcontrollerとmodelに設定をいれるだけ。
class EntriesController < ApplicationController impressionist actions: [:show]
記事一覧のPVは取らずに、記事詳細のPVだけとりたいので、showだけ指定。
モデルには一行いれるだけ。
class Entry < ActiveRecord::Base is_impressionable
これだけ。これで、テキトウな記事にアクセスしたあとにこんな感じで結果を確認すると・・・
irb(main):001:0> Entry.find(1).impressionist_count
Entry Load (0.5ms) SELECT `entries`.* FROM `entries` WHERE `entries`.`id` = 1 LIMIT 1
(0.5ms) SELECT DISTINCT COUNT(DISTINCT `impressions`.`request_hash`) FROM `impressions` WHERE `impressions`.`impressionable_id` = 1 AND `impressions`.`impressionable_type` = 'Entry'
=> 1
「おっ」と思ったのが、アプリにログイン機構が存在し、ログイン中のユーザーをbefore_actionでcurrent_userヘルパ、もしくは@current_userでアクセスできるようにしておくと、そのidをimpressions.user_idに記録してくれる。
リファラやIPはデフォで記録されるし、必要に応じてカスタムメッセージも記録できるらしいのでそのあたりはギッハブ参照のこと。
なお、http://www.user-agents.org/allagents.xml に記載されているbotのアクセスは弾かれるとのことで、特にその設定を変更するIFはないようでしたので、弾かれたくない人は自分でコード読んでなんとかするしかないようです。
こちらからは以上です。
- 出版社/メーカー: 任天堂
- 発売日: 2014/05/29
- メディア: Video Game
- この商品を含むブログ (45件) を見る