ruby 2.5.1
rails 5.2.1
はじめに
impressionistを使ってpv数を計測しようと思い、色々調べながら実装するもなかなかユニークpv数が取得できずに苦戦していました。結果的にreadme(https://github.com/charlotte-ruby/impressionist) を見て解決したので、その記録として残しておきます。最初からreadme見ればよかった。。。
導入方法
Gemfile
gem 'impressionist'
$ bundle install
次にpvを保存するテーブルを作成します。
$ rails g impressionist
このようになっていれば大丈夫です。
Running via Spring preloader in process 40810
invoke active_record
create db/migrate/20190626153731_create_impressions_table.rb
create config/initializers/impression.rb
migrateします。
$ rails db:migrate
Model
今回はQ&Aサイトの質問ページのpv数を取得したいためQestionモデルに以下のように記載します。
question.rb
class Question < ApplicationRecord
is_impressionable
end
Controllers
セッションハッシュでフィルタリングされたモデルからユニークpv数を取得します。IPで判別すると同じIPを使用する訪問者を計測できないのでセッションハッシュで判別するのがいいっぽいです。
question_controller.rb
class QuestionsController < ApplicationController
impressionist unique: [:session_hash]
def show
@question = Question.find(params[:id])
impressionist(@question, nil, unique: [:session_hash])
end
end
Views
show.html.erb
<%= @question.impressionist_count %>
更新してもテーブルのレコードや表示されるpv数が増えていなければ完璧。