[Rails] 閲覧数を計測するライブラリ
はじめに
自作のアプリケーションで記事を投稿する機能をつける時に閲覧数を表示させたかったので、以下を参考にimpressionistというGemを使い実装しました。
環境
ruby 2.6.6
rails 6.0.3
やり方
1.impressionistのインストール
gem 'impressionnist'
上記の記述をしてbundle install
をしましょう。
2.impressionnists_tableの作成
以下のコマンドを入力するとimpressionist
が定義した、impressionsテーブル
をしようすることができます。
rails g impressionist
rails db:migrate
を実行します。
rails db:migrate
すると以下のようなmigrationファイルが作成されました。
class CreateImpressionsTable < ActiveRecord::Migration[6.0]
def self.up
create_table :impressions, :force => true do |t|
t.string :impressionable_type
t.integer :impressionable_id
t.integer :user_id
t.string :controller_name
t.string :action_name
t.string :view_name
t.string :request_hash
t.string :ip_address
t.string :session_hash
t.text :message
t.text :referrer
t.text :params
t.timestamps
end
add_index :impressions, [:impressionable_type, :message, :impressionable_id], :name => "impressionable_type_message_index", :unique => false, :length => {:message => 255 }
add_index :impressions, [:impressionable_type, :impressionable_id, :request_hash], :name => "poly_request_index", :unique => false
add_index :impressions, [:impressionable_type, :impressionable_id, :ip_address], :name => "poly_ip_index", :unique => false
add_index :impressions, [:impressionable_type, :impressionable_id, :session_hash], :name => "poly_session_index", :unique => false
add_index :impressions, [:controller_name,:action_name,:request_hash], :name => "controlleraction_request_index", :unique => false
add_index :impressions, [:controller_name,:action_name,:ip_address], :name => "controlleraction_ip_index", :unique => false
add_index :impressions, [:controller_name,:action_name,:session_hash], :name => "controlleraction_session_index", :unique => false
add_index :impressions, [:impressionable_type, :impressionable_id, :params], :name => "poly_params_request_index", :unique => false, :length => {:params => 255 }
add_index :impressions, :user_id
end
def self.down
drop_table :impressions
end
end
閲覧数を計測したいモデルとコントローラーに記述を追加する。
今回は記事を投稿できるアプリケーションを想定してPost
テーブルを使用してimpressionist
用の記述をしていきます。
class QuestionsController < ApplicationController
impressionist :actions=> [:show]
def show
@post = Post.find(params[:id])
impressionist(@post, nil, unique: [:session_hash])
end
end
上記のimpressionist
ををみると第1引数に閲覧する記事のインスタンス、第2引数にオプション(今回は指定なし)、第3引数のunique: [:session_hash]
は同じ人がアクセスした場合と複数回同じ記事をみた場合は1回分のアクセスという設定をしています。
最後に計測したいモデルに以下を追加します。
class Post < ApplicationRecord
is_impressionable
end
ブラウザで閲覧数を確認する場合以下の記述をします。
<%= @post.impressionist_count %>
以上で完了です。
おまけ
閲覧数を表示するのに使いやすいものがFontAwesomeにあったので追記しておきます。
<i class="far fa-eye"></i><%= @post.impressionist_count %>
Author And Source
この問題について([Rails] 閲覧数を計測するライブラリ), 我々は、より多くの情報をここで見つけました https://qiita.com/Jackson123/items/7949b0ee26b2944c6da4著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .