Help us understand the problem. What is going on with this article?

Ruby on RailsでPV数を計測する

More than 1 year has passed since last update.

記事を投稿する機能があるサイトなどでは、PV数の多い順に記事を順位づけて表示したいという時があると思います。
Railsではあるモデルに紐づいたレコードのPV数を計測することができる impressionist というgemがあります。
プロジェクトで使用したついでに、impressionist の導入方法をまとめておきました。

Gemのimpressionistをインストール

Gemfileに以下の記述をして、bundle installしましょう。

Gemfile
gem 'impressionist'
bundle install

impressionists_tableを作成

次に、 impressionist が用意している impressionsテーブル を作成するために、以下のコマンドをターミナルで実行しマイグレーションファイルを作成しましょう。

rails g impressionist

以下のような表示が出れば、マイグレーションファイルの作成ができています。

create  db/migrate/20180508141931_create_impressions_table.rb
create  config/initializers/impression.rb

実際にテーブルを作成しましょう。

rake db:migrate

PV数を計測したいテーブルに関連したモデルとコントローラに記述を加える

わかりやすいように、本記事ではTwitterのようなサービスを考えて実装を行っていきます。
tweets_controller.rb の中で、動かしたいアクションに対して impressionist というアクションを追加します。
例えば、ある特定のツイートを誰かが押して、詳細をみた際にPV数を計測したい場合は以下のように、showアクションに impressionist をつけます。

tweets_controller.rb
class TweetsController < ApplicationController
  impressionist :actions=> [:show]

  def show
    @tweet = Tweet.find(params[:id])
  end
end

また、該当のアクション内に以下の記述をします。
PV数は様々な方法で計測することができますが、今回は同じ人アクセス(同じブラウザからアクセス)した複数回、同じ記事をみた場合は1PVと数えることにしました。

tweets_controller.rb
  def show
    @tweet = Tweet.find(params[:id])
    impressionist(@tweet, nil, unique: [:session_hash])
  end

計測したいモデルに、以下の記述をします。

tweet.rb
class Tweet < ApplicationRecord
  is_impressionable
end

以上で設定は完了です。
実際にブラウザでPV数を確認するには、以下の記述をします。

show.html.erb
<%=  @tweet.impressionist_count %>

show.html.erb にPV数が出てきたら完了です。
※同じブラウザからアクセスしてもPV数は変わらない設定なので、違うブラウザからアクセスしてみてください。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away