[RUBY] So löschen Sie Daten mit einem externen Schlüssel

Umgebung

Dieser Artikel verwendet Ruby 2.6.5, das unter macOS Catalina 10.15.6 installiert ist.

Annahme

Wir haben drei Modelle erstellt und die Situation ist wie folgt.

Benutzer / Benutzer Bericht / Bericht Zuordnungstabelle für Kommentar / Benutzerbericht

Der folgende Fehler ist beim Löschen eines Berichts mit Kommentaren aufgetreten.

Ein Fehler ist aufgetreten

ActiveRecord::InvalidForeignKey in ReportsController#destroy Externer Schlüsselfehler スクリーンショット 2020-10-22 10.00.46.png

Denken Sie über die Lösung der Ursache nach.

Ursache

Beim Löschen eines Berichts wird festgestellt, dass der Benutzer in der Kommentartabelle und der ID-Wert des Berichts verloren gehen. (Aufgrund externer Schlüsselbeschränkungen) Ich möchte Kommentare löschen können, wenn der Benutzer und die Berichts-ID nicht mehr verknüpft sind.

Lösung

dependent: :Beschreiben Sie die Zerstörung im Benutzermodell und im Berichtsmodell.


 Mit dieser Beschreibung können Sie beim Löschen des übergeordneten Modells (Bericht) auch das dem übergeordneten Modell zugeordnete "untergeordnete Modell (Kommentar)" löschen.

## Überprüfung


#### **`app/models/user.rb`**
```ruby

class User < ApplicationRecord
  has_many :reports
  has_many :comments, dependent: :destroy
end

app/models/report.rb


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

Ohne Zwischenfall abgeschlossen! das ist alles. Ich hoffe, es hilft denen, die ähnliche Probleme haben oder gegen eine Wand stoßen!

Referenz

Ich habe mich auf Folgendes bezogen. Wenn Sie den Inhalt besser verstehen möchten, schauen Sie bitte! https://qiita.com/Ushinji/items/650fa295a3054d2fe582 https://qiita.com/ITmanbow/items/2170ccaceafd5d401df8 https://qiita.com/Tsh-43879562/items/fbc968453a7063776637

Recommended Posts

So löschen Sie Daten mit einem externen Schlüssel
Fügen Sie der Spalte mit der Migration einen externen Schlüssel hinzu
So benennen Sie ein Modell mit externen Schlüsseleinschränkungen in Rails um
So löschen Sie Stücklisten (UTF-8)
So löschen Sie ein mit Rails erstelltes new_record-Objekt
Wie man mit html.erb nummeriert (nummeriert)
So löschen Sie mit Docker Bilder ohne Tags in großen Mengen
So aktualisieren Sie mit activerecord-import
[Rails] So schreiben Sie user_id (externer Schlüssel) in einen starken Parameter
Wie fange ich mit schlank an?
Hinweise zur Verwendung von Spring Data JDBC
[Rails] Verschiedene Möglichkeiten zum Löschen von Daten
Wie man ein Zeichen mit "~" einschließt
Wie man mssql-tools mit alpine benutzt
[Anfänger] So löschen Sie NO FILE
So fügen Sie die Löschfunktion hinzu
So starten Sie Camunda mit Docker
So löschen Sie große Datenmengen in Rails und Bedenken
So beschneiden Sie ein Bild in libGDX
So passen Sie TextPosition mit der iOS-Tastaturerweiterung an
So teilen Sie Dateien mit Docker Toolbox
So kompilieren Sie Java mit VsCode & Ant
[Java] Fassen Sie zusammen, wie Sie mit der Methode equals vergleichen können
Verwendung von BootStrap mit Play Framework
[Java] Hinzufügen von Daten zur Liste (add, addAll)
So wechseln Sie Miniaturbilder mit JavaScript
[Hinweis] Erste Schritte mit Rspec
API-basierte Steuerung mit cancancan
So erreichen Sie den Dateidownload mit Feign
So aktualisieren Sie verwandte Modelle mit accept_nested_attributes_for
So setzen Sie JAVA_HOME mit dem Appassembler-Maven-Plugin von Maven
So implementieren Sie TextInputLayout mit Validierungsfunktion
So behandeln Sie Anmeldefehler mit devise
So testen Sie den privaten Bereich mit JUnit
So überwachen Sie Nginx mit Docker-Compose mit Datadog
So überschreiben Sie Firebase-Daten mit Swift
Der Umgang mit dem Vorkompilieren von Assets ist fehlgeschlagen.
So erreichen Sie das Hochladen von Dateien mit Feign
So führen Sie Blazor (C #) mit Docker aus
So erstellen Sie eine Rails 6-Umgebung mit Docker
SSH in Ubuntu von einem Terminal mit öffentlicher Schlüsselauthentifizierung
[Java] So testen Sie, ob es in JUnit null ist
Wie man jeden Fall mit Mockito 1x verspottet
Wie man jeden Fall mit PowerMock + Mockito1x verspottet
Verwendung von MyBatis2 (iBatis) mit Spring Boot 1.4 (Spring 4)
So speichern Sie mit einer Eingabe in mehreren Tabellen
So testen Sie Interrupts während Thread.sleep mit JUnit
Verwendung des eingebauten h2db mit Federstiefel
So löschen Sie einen Controller usw. mit einem Befehl
Verwendung des Java-Frameworks mit AWS Lambda! ??