[RUBY] [Rails] Implementierung des PV-Nummernrankings mit Impressionist

Ziel

ezgif.com-video-to-gif.gif

Entwicklungsumgebung

・ Ruby: 2.5.7 Schienen: 5.2.4 ・ Vagrant: 2.2.7 -VirtualBox: 6.1 ・ Betriebssystem: macOS Catalina

Annahme

Folgendes wurde implementiert.

Schlanke Einführung

Implementierung

1. Einführung des "Impressionisten"

** * Geben Sie bitte die Version an! (Ein Fehler ist aufgetreten, wenn nicht angegeben) **

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. Spalte hinzufügen

Terminal


$ rails g migration AddImpressionsCountToUsers impressions_count:integer

~_add_impressions_count_to_users.rb


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

Terminal


$ rails db:migrate

3. Bearbeiten Sie das Modell

user.rb


#Nachtrag
is_impressionable counter_cache: true

is_impressionable ➡︎ Erlaube die Verwendung von "Impressionist" im Benutzermodell.

** * Bitte fügen Sie unbedingt "counter_cache: true" hinzu. ** ** **

4. Bearbeiten Sie den Controller

users_controller.rb


def index
  @users = User.order(impressions_count: 'DESC') #Sortierfunktion hinzugefügt
end

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

User.order(impressions_count: 'DESC') ➡︎ Sortieren Sie die Benutzerliste in absteigender Reihenfolge nach der Anzahl der PVs.

impressionist(@user, nil, unique: [:session_hash]) ➡︎ Wenn Sie auf die Seite mit den Benutzerdetails zugreifen, erhöht sich die Anzahl der PVs um eins.

[Bei Messung anhand der IP-Adresse] impressionist(@tourist_spot, nil, unique: [:impressionable_id, :ip_address])

** * Die Anzahl der PVs kann nur einmal pro Benutzer gezählt werden, so dass die Anzahl der PVs nicht freiwillig erhöht werden kann. ** ** **

5. Ansicht bearbeiten

slim:users/index.html.slim


table.table
  thead
    tr
      th
        |Rangfolge
      th
        |Vollständiger Name
      th
        |Anzahl der PV

  tbody
    - @users.each.with_index(1) do |user, index|
      tr
        td
          = index
          |Rang
        td
          = link_to user do
            = user.name
        td
          /Zeigen Sie die Anzahl der PV an
          = user.impressions_count

Recommended Posts

[Rails] Implementierung des PV-Nummernrankings mit Impressionist
Holen Sie sich PV (Ansichten) mit Impressionist ~ Rails
[Rails] Implementierung der Suchfunktion mit Gem's Ransack
[Rails] Implementierung der Bildvergrößerungsfunktion mit Lightbox2
[Rails] Implementierung einer Bild-Diashow mit Bootstrap 3
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der Abstammung "Vorbereitung"
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der "Seed Edition" der Vorfahren
Implementierung der Ajax-Entfernung in Rails
[Rails] Implementierung der Kategoriefunktion
[Rails] Implementierung der Tutorial-Funktion
[Rails] Implementierung einer ähnlichen Funktion
[Rails] Implementierung der automatischen Adresseneingabe mit jpostal und jp_prefecture
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der Abstammung "Erstellungsformular"
Implementierung der Rails-Sortierfunktion (angezeigt in der Reihenfolge der Anzahl der Gleichen)
[Rails] Implementierung des logischen Löschens durch den Benutzer
[Rails] Asynchrone Implementierung der Like-Funktion
[Rails] Implementierung der Bildvorschau
[Rails] Über die Implementierung der Like-Funktion
Implementierung der Validierung mit regulären Ausdrücken
[Rails] Implementierung von Viele-zu-Viele-Kategoriefunktionen
[Rails] Implementierung der Couponfunktion (mit automatischer Löschfunktion mittels Stapelverarbeitung)
[Rails] Implementierung der Tag-Funktion mit Acts-as-Taggable-On und der Funktion zur Vervollständigung der Tag-Eingabe mit Tag-It
[Android] Implementierung von SideVolling ListView mit RecyclerView
Implementierung der Benutzerauthentifizierungsfunktion mit devise (2)
Implementierung der Benutzerauthentifizierungsfunktion mit devise (1)
Rails [Für Anfänger] Implementierung der Kommentarfunktion
Implementierung von Registerkarten mit TabLayout und ViewPager
Implementierung der Benutzerauthentifizierungsfunktion mit devise (3)
[Ruby on Rails] Implementierung einer ähnlichen Funktion
[Rails] Implementierung einer Validierung, die die Eindeutigkeit beibehält
Implementierung der Ruby on Rails-Anmeldefunktion (Sitzung)
[FCM] Implementierung der Nachrichtenübertragung mit FCM + Spring Boot
[Schienen] Anzeige von mehrstufigen Strukturdaten über das Auswahlfeld
[Rails] Zeitplanverwaltung mit der Implementierung von Full Calendar Yesterday
[Nuxt / Rails] POST-Implementierung mit axios und devise_token_auth
[Rails] Implementierung von "Benachrichtigung auf irgendeine Weise benachrichtigen"
[Rails] Rangfolge und Paginierung in der Reihenfolge der Likes
[Rails] Verwenden Sie das Pulldown-Feld, um die Post-Liste nach Datum oder Anzahl der Likes zu sortieren.
Implementierung der Google-Anmeldung mithilfe der Google OAuth 2.0-Authentifizierung (Server Edition)
[Rails] Implementierung der Drag & Drop-Funktion (mit Wirkung)
Implementierung der Ruby on Rails-Anmeldefunktion (Devise Edition)
[Schienen] Beachten Sie bei der Verwendung von Ajax die "CSRF-Maßnahmen".
Verwenden der PAY.JP-API mit Rails ~ Implementierungsvorbereitung ~ (payjp.js v2)
Rails6: Geben Sie die Anfangsdaten von ActionText mit seed ein
Begrenzen Sie die Anzahl der Threads mithilfe des Java Executor Service