読者です 読者をやめる 読者になる 読者になる

リア充爆発日記

You don't even know what ria-ju really is.

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はないようでしたので、弾かれたくない人は自分でコード読んでなんとかするしかないようです。

こちらからは以上です。

マリオカート8

マリオカート8