Holen Sie sich PV (Ansichten) mit Impressionist ~ Rails

Ziel

In diesem Artikel verwenden wir ein Juwel namens Impressionist, um die Erfassung von PV-Nummern (Seitenansicht) und das PV-Nummernranking von Posts zu implementieren.

Klicken Sie hier für Details ~

Entwicklungsumgebung

・ Ruby: 2.6.2 ・ Schienen: 6.0.3 ・ Betriebssystem: Windows

Annahme

Mit dem Tweet-Modell wurde eine Reihe von Buchungsfunktionen erstellt.

Implementierung

1. Einführung des "Impressionisten"

Fügen Sie der Gemfile die folgende Zeile hinzu.

Gemfile


gem 'impressionist'

Terminal


$ bundle install

Erstellen Sie als Nächstes eine Tabelle, die die Anzahl der PVs zählt.

Terminal


$ rails g impressionist

Terminal


$ rails db:migrate

Sie haben die folgende Impersionstabelle.

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. Fügen Sie der Tweets-Tabelle eine Zählspalte hinzu

Terminal


$ rails g migration AddImpressionsCountToTweets impressions_count:integer

Fügen Sie der folgenden Migrationsdatei `` `default: 0``` hinzu.

~_add_impressions_count_to_tweets.rb


class AddImpressionsCountToTweets < ActiveRecord::Migration[6.0]
  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

tweet.rb


#Nachtrag
is_impressionable counter_cache: true

is_impressionable ➡︎ Aktiviert "Impressionist" im Tweet-Modell.

counter_cache: true ➡︎ Stellen Sie sicher, dass die Spalte impressionions_count aktualisiert ist.

4. Bearbeiten Sie den Controller

tweets_controller.rb



def index
  @tweets = Tweet.all
  @rank_tweets = Tweet.order(impressions_count: 'DESC') #Sortierfunktion hinzugefügt
end

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

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

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

** * Dieses Mal wird die Anzahl der PVs von ip_address gezählt, sodass die Anzahl der PVs nicht freiwillig erhöht werden kann. ** ** **

** * Wenn Sie Rails s auf localhost ausprobieren, hat ip_address den Standardwert :: 1, sodass die Anzahl der PVs 1 nicht überschreitet. Stellen Sie jedoch sicher, dass bestätigt wurde, dass es nach der Bereitstellung ordnungsgemäß funktioniert. ** ** **

5. Ansicht bearbeiten

erb:app/tweets/index.html.erb



<h3>Beitragsliste</h3>
<% @tweets.each do |t| %>
  <%= t.~ %>
  
  #Anzahl der PV
  <%= t.impressions_count %>
<% end %>


<h3>PV-Nummernranking</h3>
<% @rank_tweets.each do |t| %>
  <%= t.~ %>
  
  #Anzahl der PV
  <%= t.impressions_count %>
<% end %>

Recommended Posts

Holen Sie sich PV (Ansichten) mit Impressionist ~ Rails
[Rails] Implementierung des PV-Nummernrankings mit Impressionist
Holen Sie sich Youtube-Kanalinformationen mit der Rails-App (mit Yt gem)
[Rails] Holen Sie sich UserAgent auf den Controller
Suchfunktion mit [Rails] Ransack
SNS-Authentifizierung mit Rails Google
[Schienen] Speichern Sie Bilder mit Carrierwave
Japanisieren Sie mit i18n mit Rails
[Rails] Japanische Lokalisierung mit Rails-i18n
Holen Sie sich Twitter-Bilder mit twitter4j
[Rails] Testcode mit Rspec
Fehler bei der Verwendung von Schienen Capybara
[Rails] Versuchen Sie, Faradays Middleware zu verwenden
Detaillierte Tipps zur Verwendung von Rails
[Rails 6] Sternförmige Überprüfung mit Raty.js