[RUBY] [Rails] Mise en œuvre du classement des nombres PV à l'aide de l'impressionniste

Cible

ezgif.com-video-to-gif.gif

Environnement de développement

・ Rubis: 2.5.7 Rails: 5.2.4 ・ Vagrant: 2.2.7 -VirtualBox: 6.1 ・ Système d'exploitation: macOS Catalina

supposition

Ce qui suit a été mis en œuvre.

Présentation mince

la mise en oeuvre

1. Introduit «impressionniste»

** * Attention à bien préciser la version! (Une erreur s'est produite si non spécifié) **

Gemfile


gem 'impressionist', '~>1.6.1'

Terminal


$ bundle

Terminal


$ rails g impressionist

Terminal


$ rails db:migrate

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. Ajouter une colonne

Terminal


$ rails g migration AddImpressionsCountToUsers impressions_count:integer

~_add_impressions_count_to_users.rb


class AddImpressionsCountToUsers < ActiveRecord::Migration[5.2]
  def change
    # 「default:"0" ajouté
    add_column :users, :impressions_count, :integer, default: 0
  end
end

Terminal


$ rails db:migrate

3. Modifiez le modèle

user.rb


#Postscript
is_impressionable counter_cache: true

is_impressionable ➡︎ Autorisez ʻimpressionist` à être utilisé dans le modèle User.

** * Veuillez vous assurer d'ajouter counter_cache: true. ** **

4. Modifiez le contrôleur

users_controller.rb


def index
  @users = User.order(impressions_count: 'DESC') #Ajout de la fonction de tri
end

def show
  @user = User.find(params[:id])
  impressionist(@user, nil, unique: [:session_hash]) #Postscript
end

User.order(impressions_count: 'DESC') ➡︎ Triez la liste des utilisateurs par ordre décroissant du nombre de PV.

impressionist(@user, nil, unique: [:session_hash]) ➡︎ Lorsque vous accédez à la page des détails de l'utilisateur, le nombre de PV augmente de un.

[Lors de la mesure par adresse IP] impressionist(@tourist_spot, nil, unique: [:impressionable_id, :ip_address])

** * Le nombre de PV ne peut être compté qu'une seule fois par utilisateur afin que le nombre de PV ne puisse pas être augmenté volontairement. ** **

5. Modifier la vue

slim:users/index.html.slim


table.table
  thead
    tr
      th
        |Classement
      th
        |Nom complet
      th
        |Nombre de PV

  tbody
    - @users.each.with_index(1) do |user, index|
      tr
        td
          = index
          |Rang
        td
          = link_to user do
            = user.name
        td
          /Afficher le nombre de PV
          = user.impressions_count

Recommended Posts

[Rails] Mise en œuvre du classement des nombres PV à l'aide de l'impressionniste
Obtenez PV (vues) en utilisant impressionniste ~ Rails
[Rails] Implémentation de la fonction de recherche en utilisant le ransack de gem
[Rails] Implémentation de la fonction d'agrandissement d'image à l'aide de lightbox2
[Rails] Implémentation du diaporama d'images à l'aide de Bootstrap 3
[Rails] Implémentation de la fonction de catégorie multicouche en utilisant l'ascendance "Préparation"
[Rails] Implémentation de la fonction de catégorie multicouche à l'aide de l'ascendance "seed edition"
Implémentation de la suppression d'ajax dans Rails
[Rails] Implémentation de la fonction de catégorie
[Rails] Implémentation de la fonction tutoriel
[Rails] Implémentation d'une fonction similaire
[Rails] Implémentation de la saisie d'adresse automatique avec jpostal et jp_prefecture
[Rails] Implémentation de la fonction de catégorie multicouche à l'aide de l'ascendance "Formulaire de création"
Mise en place de la fonction de tri des rails (affichés par ordre de nombre de like)
[Rails] Implémentation de la suppression logique utilisateur
[Rails] Implémentation asynchrone de la fonction similaire
[Rails] Implémentation de la fonction de prévisualisation d'image
[Rails] À propos de la mise en œuvre de la fonction similaire
Implémentation de la validation à l'aide d'expressions régulières
[Rails] Implémentation de fonctions de catégorie plusieurs à plusieurs
[Rails] Implémentation de la fonction coupon (avec fonction de suppression automatique par traitement par lots)
[Rails] Implémentation de la fonction de balise à l'aide de la fonction agit-as-taggable-on et de la fonction de complétion d'entrée de balise à l'aide de tag-it
[Android] Implémentation de ListView à défilement latéral à l'aide de RecyclerView
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (2)
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (1)
Rails [Pour les débutants] Implémentation de la fonction de commentaire
Implémentation des onglets à l'aide de TabLayout et ViewPager
Implémentation de la fonction d'authentification des utilisateurs à l'aide de devise (3)
[Ruby on rails] Implémentation d'une fonction similaire
[Rails] Mise en œuvre de la validation qui maintient l'unicité
Implémentation de la fonction de connexion Ruby on Rails (Session)
[FCM] Implémentation de la transmission de messages en utilisant FCM + Spring boot
[Rails] Affichage des données de structure à plusieurs niveaux à l'aide de la boîte de sélection
[Rails] Gestion des horaires à l'aide du calendrier complet Implémentation d'hier
[Nuxt / Rails] Implémentation POSTed en utilisant axios et devise_token_auth
[Rails] Mise en œuvre de "notifier la notification d'une manière ou d'une autre"
[Rails] Classement et pagination par J'aime
[Rails] Utilisez la zone déroulante pour trier la liste des articles par date ou par nombre de likes.
Mise en œuvre de Google Sign-In à l'aide de l'authentification Google OAuth 2.0 (édition serveur)
[Rails] Implémentation de la fonction glisser-déposer (avec effet)
Implémentation de la fonction de connexion Ruby on Rails (édition de devise)
[Rails] Lorsque vous utilisez ajax, faites attention aux "mesures CSRF".
Utilisation de l'API PAY.JP avec Rails ~ Préparation de l'implémentation ~ (payjp.js v2)
Rails6: saisissez les données initiales d'ActionText à l'aide de seed
Limiter le nombre de threads à l'aide du service d'exécution de Java