株式会社TECH LUCKという会社で代表兼エンジニアをしている齊藤です。
DXプロジェクト、開発プロジェクト、Rails開発などでお困りごとがありましたら弊社HPからご相談をいただけますと幸いです。
以下のような問題に対応することが可能です。
- プロジェクトでRailsエンジニアが足りなくて困っている
- Railsのバージョンアップをしたいがノウハウ・リソースが足りなくて困っている
- オフショア開発をしているが、要件の齟齬やコード品質が悪いので改善したい
また、Railsエンジニアも募集しておりますので、興味がありましたら弊社HPからご連絡いただけますと幸いです。
前提
記事を投稿する機能があるサイトなどでは、PV数の多い順に記事を順位づけて表示したいという時があると思います。
Railsではあるモデルに紐づいたレコードのPV数を計測することができる impressionist というgemがあります。
プロジェクトで使用したついでに、impressionist
の導入方法をまとめておきました。
Gemのimpressionistをインストール
Gemfileに以下の記述をして、bundle install
しましょう。
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
をつけます。
class TweetsController < ApplicationController
impressionist :actions=> [:show]
def show
@tweet = Tweet.find(params[:id])
end
end
また、該当のアクション内に以下の記述をします。
PV数は様々な方法で計測することができますが、今回は同じ人アクセス(同じブラウザからアクセス)した複数回、同じ記事をみた場合は1PVと数えることにしました。
def show
@tweet = Tweet.find(params[:id])
impressionist(@tweet, nil, unique: [:session_hash])
end
計測したいモデルに、以下の記述をします。
class Tweet < ApplicationRecord
is_impressionable
end
以上で設定は完了です。
実際にブラウザでPV数を確認するには、以下の記述をします。
<%= @tweet.impressionist_count %>
show.html.erb
にPV数が出てきたら完了です。
※同じブラウザからアクセスしてもPV数は変わらない設定なので、違うブラウザからアクセスしてみてください。