Dans cet article, nous utiliserons un joyau appelé Impressionniste pour implémenter l'acquisition du nombre PV (page vue) et le classement du nombre PV des publications.
Cliquez ici pour plus de détails ~
・ Rubis: 2.6.2 ・ Rails: 6.0.3 ・ OS: fenêtres
Un ensemble de fonctions de publication a été créé avec le modèle Tweet.
Ajoutez la ligne suivante au gemfile.
Gemfile
gem 'impressionist'
Terminal
$ bundle install
Ensuite, créez un tableau qui compte le nombre de PV.
Terminal
$ rails g impressionist
Terminal
$ rails db:migrate
Vous aurez le tableau des imperssions suivant.
schema.rb
create_table "impressions", force: :cascade 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.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["controller_name", "action_name", "ip_address"], name: "controlleraction_ip_index"
t.index ["controller_name", "action_name", "request_hash"], name: "controlleraction_request_index"
t.index ["controller_name", "action_name", "session_hash"], name: "controlleraction_session_index"
t.index ["impressionable_type", "impressionable_id", "ip_address"], name: "poly_ip_index"
t.index ["impressionable_type", "impressionable_id", "params"], name: "poly_params_request_index"
t.index ["impressionable_type", "impressionable_id", "request_hash"], name: "poly_request_index"
t.index ["impressionable_type", "impressionable_id", "session_hash"], name: "poly_session_index"
t.index ["impressionable_type", "message", "impressionable_id"], name: "impressionable_type_message_index"
t.index ["user_id"], name: "index_impressions_on_user_id"
end
Terminal
$ rails g migration AddImpressionsCountToTweets impressions_count:integer
Ajoutez `` par défaut: 0 '' au fichier de migration suivant.
~_add_impressions_count_to_tweets.rb
class AddImpressionsCountToTweets < ActiveRecord::Migration[6.0]
def change
# 「default:"0" ajouté
add_column :users, :impressions_count, :integer, default: 0
end
end
Terminal
$ rails db:migrate
tweet.rb
#Postscript
is_impressionable counter_cache: true
is_impressionable
➡︎ Permet d'utiliser ʻimpressionniste` dans les modèles de Tweet.
counter_cache: true
➡︎ Assurez-vous que la colonne impressions_count est mise à jour.
tweets_controller.rb
def index
@tweets = Tweet.all
@rank_tweets = Tweet.order(impressions_count: 'DESC') #Ajout de la fonction de tri
end
def show
@tweet = User.find(params[:id])
impressionist(@tweet, nil, unique: [:ip_address]) #Postscript
end
Tweet.order(impressions_count: 'DESC')
➡︎ Triez la liste des tweets par ordre décroissant du nombre de PV.
impressionist(@user, nil, unique: [:ip_address])
➡︎ Lorsque vous accédez à la page des détails du tweet, le nombre de PV augmente de un.
** * Cette fois, le nombre de PV sera compté par ip_address afin que le nombre de PV ne puisse pas être augmenté volontairement. ** **
** * Si vous essayez des rails sur localhost, ip_address aura la valeur par défaut :: 1, donc le nombre de PV ne dépassera pas 1. Cependant, soyez assuré qu'il a été confirmé qu'il fonctionne correctement après le déploiement. ** **
erb:app/tweets/index.html.erb
<h3>Liste des messages</h3>
<% @tweets.each do |t| %>
<%= t.~ %>
#Nombre de PV
<%= t.impressions_count %>
<% end %>
<h3>Classement des numéros PV</h3>
<% @rank_tweets.each do |t| %>
<%= t.~ %>
#Nombre de PV
<%= t.impressions_count %>
<% end %>
Recommended Posts