Rails '5.2.3' Ruby '2.7.1' PostgreSQL
J'ai essayé de supprimer l'élément enregistré tout en vérifiant le fonctionnement dans l'environnement local lors de la création de l'application de partage d'avis.
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
Erreur ,. Il n'y a pas de table de commentaires appelée ʻon table "comments" `. J'étais inquiet, mais lorsque j'ai créé l'application pour la première fois, je pensais créer une fonction de commentaire pour révision, mais n'est-il pas nécessaire d'avoir une fonction de commentaire unilatérale pour la révision? Il y avait un passé que j'ai arrêté de mettre en œuvre parce que je pensais (j'avais oublié). Cependant, je pensais que le tableau des commentaires avait été supprimé et j'en étais accro.
La relation est que l'élément a plusieurs avis lors de la création d'une application de partage d'avis dans Rails.
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
De là, c'est une considération que les débutants ont pensé. Je vous serais reconnaissant de bien vouloir préciser si c'est différent.
En même temps que vous essayez de supprimer l'élément, l'avis associé à l'élément sera également supprimé.
has_many: reviews, dependant :: destroy
This.
Donc cette fois, l'élément est supprimé → l'avis disparaît → le tableau des commentaires reste
review.rb
(réduction)
has_many :comments, dependent: :destroy
Je pensais que c'était un phénomène que l'examen ne pouvait pas être effacé car il n'y avait pas de description, donc l'élément ne pouvait pas être effacé.
Tout d'abord, c'est une confirmation que le tableau des commentaires reste vraiment.
Mise à jour de db / schema.rb avec rails db: schema: dump
.
Après cela, si vous regardez schema.rb
schema.rb
create_table "comments", force: :cascade do |t|
(réduction)
end
J'avais des commentaires ... Supprimez les tableaux inutiles.
Créez un fichier de migration et écrivez ce qui suit
def change
drop_table :comments
end
Au revoir avec les rails db: migrer. Vous pouvez désormais supprimer les avis des deux articles! !!
Je l'ai écrit pendant longtemps avec juste cela, mais la leçon que j'ai apprise dans ce cas est que la machine ne trahira pas, et c'est la première personne à douter. L'hypothèse n'est pas bonne. C'est mon premier message, donc il y a beaucoup de choses dont je ne suis pas sûr, mais j'espère que cela aide quelqu'un.
Recommended Posts