[RUBY] [Rails] Beiträge können nicht gelöscht werden, wenn sie kommentiert werden! ??

Hintergrund der Veröffentlichung

Ich erstelle SNS wie Twitter und Fb. Ich habe der Post-Funktion eine Schaltfläche zum Löschen hinzugefügt ... ** Ich kann den Post nicht löschen! !! ** **.

Im Detail können Sie nur einen Beitrag löschen. Veröffentlichen Sie ein Foto in einem Beitrag (nur wenn es in ein Beitragsmodell und ein Bildmodell unterteilt ist) Wenn Sie einen Beitrag kommentieren, können Sie ihn nicht löschen. ..

** [Heutige Charaktere] ** (Übergeordnetes) Beitragsmodell → Modell zum Speichern von Beiträgen (Untergeordnetes) Bildmodell → Ein Modell, das Bilder speichert, die mit Posts verknüpft sind (Untergeordnetes) Kommentarmodell → Modell zum Speichern von Kommentaren für Beiträge

Mit anderen Worten, wenn ein Wert in das ** untergeordnete Modell (Bildmodell, Kommentarmodell) ** eingegeben wird, das in das ** Post-Modell ** verschachtelt ist, kann der Post-Datensatz nicht gelöscht werden.

Werfen wir einen Blick auf den tatsächlichen Code.

Tatsächlicher Code

post.rb


class Post < ApplicationRecord
  belongs_to :user
  has_many :comments
  has_many :images
end

Es ist eine unkonventionelle Post-Model-Assoziation. Wenn dies jedoch unverändert bleibt, kann das übergeordnete Modell nicht gelöscht werden, wenn ein Wert in das untergeordnete Modell eingegeben wird. Denn wenn der Elternteil verschwindet, ** verschwindet der Elternteil des Kindes **. .. Es ist natürlich lol

Mit anderen Worten, wenn Sie ein Elternteil löschen, können Sie es so einstellen, dass das Kind ebenfalls gelöscht wird.

Lösung

Setzen wir ** "abhängige :: zerstören" ** im Modell. abhängig ... Übersetzt ist es "abhängig". Ich denke, es ist einfach, sich ein Bild zu machen.

Das zum Zeitpunkt der Zuordnung festgelegte Modell wird gelöscht, wenn die Klasse gelöscht wird. Ich weiß nicht, was du sagst, ich werde es unten schreiben.

Code nach Auflösung

post.rb


class Post < ApplicationRecord
  belongs_to :user
  has_many :comments,  dependent: :destroy
  has_many :images,    dependent: :destroy
end

Hast du irgendwie verstanden? Sie haben das ** Bildmodell ** und ** Kommentarmodell ** in der ** Post-Klasse ** festgelegt. Wenn das Post-Modell (Post) gelöscht wird, wird auch das Modell (Bild, Kommentar) gelöscht, für das in der Zuordnung ** abhängig :: zerstören ** festgelegt ist.

wichtiger Punkt

Ich möchte, dass Sie diesbezüglich etwas wissen. Tatsächlich ist diese ** abhängige :: Zerstörung ** keine Einstellung zum Löschen von untergeordneten Modellen.

Es ist eine Einstellung zum Löschen einer Zuordnung.

Schreiben wir zum Beispiel Folgendes in das Kommentarmodell.

comment.rb


belongs_to :post, dependent: :destroy

In diesem Fall wird beim Löschen des Kommentars ** auch der Beitrag gelöscht **.

Ich werde es noch einmal sagen. ** Modelle, die zum Zeitpunkt der Zuordnung konfiguriert wurden, werden gelöscht, wenn die Klasse gelöscht wird. ** **.

Zusammenfassung

Vielen Dank, dass Sie meine schlechte Erklärung bis zum Ende gelesen haben. Wenn Sie Fehler oder Ergänzungen haben, würde ich mich freuen, wenn Sie einen Kommentar abgeben könnten.

Mehr und mehr.

Recommended Posts

[Rails] Beiträge können nicht gelöscht werden, wenn sie kommentiert werden! ??
Misst, wenn kein Modell erstellt werden kann
[Rails 6] MySQL 2 kann die Installation nicht bündeln
Rails-Tutorial Wenn Rails aufgrund unterschiedlicher Versionen nicht neu erstellt werden können
Unerwartete Fallstricke, wenn Bilder nicht angezeigt werden können
Der Rails-Server kann in Cloud9 nicht gestartet werden
[Android] Lösung, wenn die Kamera unter Android 9 nicht gestartet werden kann
[Schienen] Beachten Sie bei der Verwendung von Ajax die "CSRF-Maßnahmen".
Hinweis: Wenn pip install mysqlclient nicht auf einem Mac installiert werden kann
Achten Sie bei der Verwendung von MessageEncryptor mit Rails 5.2 / 6.0 auf den Zeitpunkt der Initialisierung
[Rails] Probleme, die mit devise nicht registriert / angemeldet werden können
Vermeiden Sie das Problem, dass beim Upgrade von Rails 4.2.x auf 5.0.x keine Sitzung abgerufen werden kann, wenn Canary freigegeben wird.