Obtenez PV (vues) en utilisant impressionniste ~ Rails

Cible

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 ~

Environnement de développement

・ Rubis: 2.6.2 ・ Rails: 6.0.3 ・ OS: fenêtres

supposition

Un ensemble de fonctions de publication a été créé avec le modèle Tweet.

la mise en oeuvre

1. Introduit «impressionniste»

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

2. Ajoutez une colonne de comptage au tableau Tweets

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

3. Modifiez le modèle

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.

4. Modifiez le contrôleur

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. ** **

5. Modifier la vue

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

Obtenez PV (vues) en utilisant impressionniste ~ Rails
[Rails] Mise en œuvre du classement des nombres PV à l'aide de l'impressionniste
Obtenez des informations sur la chaîne Youtube avec l'application Rails (en utilisant Yt gem)
[Rails] Obtenir UserAgent sur le contrôleur
Fonction de recherche à l'aide de [rails] ransack
Authentification SNS à l'aide de Rails google
[Rails] Enregistrez des images à l'aide de carrierwave
Japaneseize en utilisant i18n avec Rails
[Rails] Localisation japonaise à l'aide de rails-i18n
Obtenez des images Twitter avec twitter4j
[Rails] Code de test à l'aide de Rspec
Erreur lors de l'utilisation des rails capybara
[Rails] Essayez d'utiliser le middleware de Faraday
Conseils détaillés lors de l'utilisation de Rails
[Rails 6] Revue en forme d'étoile utilisant Raty.js