[Erstellen Sie eine Zwischentabelle, weil es viele zu viele sind](#Erstellen Sie eine Zwischentabelle, weil es viele zu viele sind)
[Modell in zwei Teile denken (hier wichtig)](# Modell in zwei Teile hier wichtig denken)
[(1) Denken Sie aus der Perspektive des Nachfolgers](# Denken Sie aus der Perspektive des Nachfolgers)
[② Denken Sie aus der Perspektive des Nachfolgers](# Denken Sie aus der Perspektive des Nachfolgers)
In den letzten Tagen hatte ich Mühe, die Zuordnung der Verfolgungsfunktion zu verstehen, aber ich habe es endlich geschafft, sie in mich selbst zu integrieren, sodass ich sie als Memorandum belassen werde.
Persönlich war ich verwirrt über die ** Beschreibung der Zuordnung zum Benutzermodell **, daher schreibe ich hauptsächlich darüber. Dieses Mal habe ich die Implementierung von View und Controller nicht angesprochen.
Also werde ich sofort anfangen.
Da die Zuordnung der folgenden Funktionen eine Viele-zu-Viele-Zuordnung (Benutzer-zu-Benutzer) ist, Es ist erforderlich, eine Zwischentabelle vorzubereiten und sie zu einer "Eins-zu-Viele" -Zuordnung (Benutzer-zu-Beziehungen) zu machen.
(Für diejenigen, die eins zu viele oder viele zu viele mögen, [[für Anfänger] Rails "Assoziation" Tutorial, das zu höflich ist [alles] [perfekt verstanden]](https://qiita.com/kazukimatsumoto/items/14bdff681ec5ddac26d1 #% E3% 83% 95% E3% 82% A9% E3% 83% AD% E3% 83% BC% E3% 83% 95% E3% 82% A9% E3% 83% AD% E3% 83% AF% E3% 83% BC% E6% A9% 9F% E8% 83% BD% E3% 82% 92er% E5% 9B% B3% E3% 82% 92% E4% BD% BF% E3% 81% A3% E3% 81% A6% E8% A8% AD% E8% A8% 88% E3% 81% 97% E3% 82% 88% E3% 81% 86) Ich empfehle den Artikel. Ich lernte.)
Erstellen Sie zunächst ein Beziehungsmodell.
$ rails g model Relationship
Fügen Sie der Migrationsdatei die folgende_ID (folgende Seiten-ID) und die folgende_ID (folgende Seiten-ID) hinzu.
202008111333110_create_relationships.rb
class CreateRelationships < ActiveRecord::Migration[5.2]
def change
create_table :relationships do |t|
#Anhänger
t.integer :following_id
#Gefolgte Seite
t.integer :follower_id
t.timestamps null: false
end
add_index :relationships, :following_id
add_index :relationships, :follower_id
add_index :relationships, [:following_id, :follower_id], unique: true
end
end
Vergiss nicht ...
$ rails db:migrate
Von hier ** ① Den Follower anschauen ** ** ② Blick auf die zu befolgende Seite ** Es ist notwendig, zwischen den beiden zu unterscheiden. Seien Sie vorsichtig, da Sie nicht wissen, was es ist, wenn Sie es mehrdeutig machen!
Als allererstes ... ** 1. Denken Sie an das Beziehungsmodell in zwei Teilen ** ・ Active_relationships (Blick auf den Follower) ・ Passive_Beziehungen (aus der Sicht der Person, der gefolgt wird)
user.rb
class User < ApplicationRecord
has_many :active_relationships, class_name: "Relationship", foreign_key: :following_id, dependent: :destroy
has_many :passive_relationships, class_name: "Relationship", foreign_key: :follower_id, dependent: :destroy
end
Da es nur eine "Annahme" ist, dass ein Beziehungsmodell einen Namen erhält und in zwei Modelle unterteilt ist, muss in class_name beschrieben werden, dass es sich tatsächlich um ein Beziehungsmodell handelt.
Aus Sicht des Followers wird der Follower (follower_id) basierend auf dem Follower (follow_id) gezogen, sodass der Primärschlüssel (externer Schlüssel) als folgende_id angegeben werden muss.
Im Gegensatz dazu wird aus Sicht der Follower-Seite die Follower-Seite (follow_id) basierend auf der Follower-Seite (follower_id) gezogen, sodass der Primärschlüssel (externer Schlüssel) als Follower_id angegeben werden muss.
** 2. Denken Sie an das Benutzermodell in zwei Teilen ** ・ Folgen (aus der Sicht des Nachfolgers) ・ Follower (die Sichtlinie des Followers)
relationship.rb
class Relationship < ApplicationRecord
belongs_to :following, class_name: "User"
belongs_to :follower, class_name: "User"
end
Wie beim Beziehungsmodell ist es nur eine "Annahme", dass einem Benutzermodell ein Name zugewiesen und in zwei Modelle unterteilt wird. Daher muss in class_name beschrieben werden, dass es sich tatsächlich um ein Benutzermodell handelt.
Zeile 2: ** Sammeln Sie Personen, die über active_relationship verfolgt werden ** Sammeln Sie Leute, die durch active_relationships verfolgt werden. Um die Personen zu sammeln, denen gefolgt wird, beziehen Sie sich auf das "Follower" -Modell. Schreiben Sie also source :: follower. Da wir diese Reihe von Flows "Followings" genannt haben, beschreiben wir sie als has_many: followings.
user.rb
has_many :active_relationships, class_name: "Relationship", foreign_key: :following_id
has_many :followings, through: :active_relationships, source: :follower
Zeile 1: ** Beschreiben Sie zunächst das Beziehungsmodell (passive_relationships hier) ** Es wurde bereits erläutert, wo das obige Beziehungsmodell in zwei Teile unterteilt ist.
Zeile 2: ** Sammeln Sie Personen, denen Sie über passive_relationship folgen ** Sammeln Sie Menschen, denen passive Beziehungen folgen. Um Personen zu sammeln, denen gefolgt wird, verweisen Sie auf das "folgende" Modell. Schreiben Sie also source :: follow. Da wir diese Reihe von Flows "Follower" genannt haben, schreiben wir sie als has_many: Follower.
user.rb
has_many :passive_relationships, class_name: "Relationship", foreign_key: :follower_id
has_many :followers, through: :passive_relationships, source: :following
Die endgültige Beschreibung für das Benutzermodell lautet also wie folgt.
user.rb
class User < ApplicationRecord
#Die Sichtlinie des Nachfolgers
has_many :active_relationships, class_name: "Relationship", foreign_key: :following_id
has_many :followings, through: :active_relationships, source: :follower
#Blick auf die Seite, der man folgen muss
has_many :passive_relationships, class_name: "Relationship", foreign_key: :follower_id
has_many :followers, through: :passive_relationships, source: :following
end
Das ist das Ende.
Um die Verfolgungsfunktion abzuschließen, müssen Ansicht und Steuerung getrennt implementiert werden.
Das heißt, ich habe tatsächlich erlebt und das Gefühl, dass der Berg der Implementierung von Follow-Funktionen darin besteht, "die Beschreibung des Benutzermodells zu verstehen". Wenn Sie diesen Berg überqueren, können Sie ihn problemlos implementieren. : Daumen hoch:
Ich denke, diesmal geht es darum, an jedes zweite Modell zu denken.
Erstens ist die Struktur, die sowohl der Follower als auch der Follower auf ein Modell namens Benutzermodell verweisen und die Daten einbringen, kompliziert, so dass es die Beziehung zwischen dem Post-Modell der gleichen Funktion und dem Benutzermodell zu sein scheint. Wenn Sie davon ausgehen, dass es sich bei dem Benutzermodell um zwei Modelle handelt (obwohl es sich tatsächlich um ein Modell handelt) und die Beziehungen organisieren, können Sie davon ausgehen, dass es sich möglicherweise um eine unerwartet einfache Geschichte handelt.
Vielen Dank, dass Sie so weit gelesen haben. Ich bin ein Anfänger, der noch nicht genug Wissen hat. Ich würde mich freuen, wenn Sie mir einen Rat geben könnten, wenn etwas nicht stimmt.
Recommended Posts