Rails '5.2.3' Ruby '2.7.1' PostgreSQL
Ich habe versucht, das registrierte Element zu löschen, während ich den Vorgang in der lokalen Umgebung beim Erstellen der Anwendung zur Freigabe von Überprüfungen überprüft habe.
ActiveRecord::InvalidForeignKey in ItemsController#destroy
PG::ForeignKeyViolation: ERROR: update or delete on table "reviews" violates foreign key constraint "fk_rails_5350d1b47c" on table "comments" DETAIL: Key (id)=(6) is still referenced from table "comments". : DELETE FROM "reviews" WHERE "reviews"."id" = $1
Error ,. Es gibt keine Kommentartabelle mit dem Namen "auf Tabelle" Kommentare ". Ich war besorgt darüber, aber als ich die App zum ersten Mal erstellte, dachte ich darüber nach, eine Kommentarfunktion zur Überprüfung zu erstellen. Ist es jedoch nicht erforderlich, eine einseitige Kommentarfunktion zur Überprüfung zu haben? Es gab eine Vergangenheit, in der ich die Implementierung eingestellt habe, weil ich dachte (ich habe es vergessen). Ich dachte jedoch, dass die Kommentartabelle gelöscht wurde und ich süchtig danach war.
Die Beziehung besteht darin, dass das Element mehrere Bewertungen hat, während eine App zum Teilen von Bewertungen in Rails erstellt wird.
item.rb
has_many :category_items, dependent: :destroy
has_many :categories, through: :category_items
has_many :reviews, dependent: :destroy
has_many :favorites, dependent: :destroy
accepts_nested_attributes_for :category_items
review.rb
belongs_to :user
belongs_to :item
has_many :notifications, dependent: :destroy
Von hier aus ist es eine Überlegung, die die Anfänger dachten. Ich würde es begrüßen, wenn Sie darauf hinweisen könnten, ob es anders ist.
Während Sie versuchen, den Artikel zu löschen, wird auch die mit dem Artikel verknüpfte Überprüfung gelöscht.
has_many: reviews, abhängige :: destroy
Dies.
Dieses Mal wird das Element gelöscht → Überprüfung verschwindet → Kommentartabelle bleibt erhalten
review.rb
(Kürzung)
has_many :comments, dependent: :destroy
Ich dachte, dass es ein Phänomen ist, dass die Überprüfung nicht gelöscht werden kann, weil es keine Beschreibung gibt, sodass der Artikel nicht gelöscht werden kann.
Zunächst einmal ist es eine Bestätigung, dass die Kommentartabelle wirklich erhalten bleibt.
Aktualisiert db / schema.rb mit Rails db: schema: dump
.
Danach, wenn Sie sich schema.rb ansehen
schema.rb
create_table "comments", force: :cascade do |t|
(Kürzung)
end
Ich hatte Kommentare ... Löschen Sie nicht benötigte Tabellen.
Erstellen Sie eine Migrationsdatei und schreiben Sie Folgendes
def change
drop_table :comments
end
Auf Wiedersehen mit Schienen db: migrieren. Sie können jetzt Bewertungen für beide Artikel löschen! !!
Ich habe es lange Zeit damit geschrieben, aber die Lektion, die ich in diesem Fall gelernt habe, ist, dass die Maschine nicht verraten wird und es die erste Person ist, die daran zweifelt. Die Annahme ist nicht gut. Es ist mein erster Beitrag, daher gibt es viele Dinge, bei denen ich mir nicht sicher bin, aber ich hoffe, dass sie jemandem helfen.
Recommended Posts