[RUBY] J'étais accro au record du modèle associé

Environnement de travail

Rails '5.2.3' Ruby '2.7.1' PostgreSQL

Ce à quoi j'étais accro

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.

Contexte addictif

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

Pensez à la cause de l'erreur

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é.

Alors, comment gérer cette erreur

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.

tableau des commentaires supprimé

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! !!

Résumé

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

J'étais accro au record du modèle associé
J'étais accro au réglage de laradock + VSCode + xdebug
J'étais accro à la méthode du rouleau
J'étais accro au test Spring-Batch
J'étais accro au paramètre API version min23 de registerTorchCallback
Enregistré parce que j'étais accro à l'entrée standard de la classe Scanner
[Circle CI] J'étais accro au test automatique de Circle CI (rails + mysql) [Memo]
J'étais accro à NoSuchMethodError dans Cloud Endpoints
J'étais accro au démarrage de sbt
Ce à quoi j'étais accro lors de l'introduction de la bibliothèque JNI
J'étais accro à la mise à jour de la déclaration dans MyBatis
Ce à quoi j'étais accro avec l'API REST Redmine
L'histoire à laquelle j'étais accro lors de la création de STS
La partie à laquelle j'étais accro dans "Introduction à Ajax dans les applications Web Java" de NetBeans
Notez que j'étais accro aux paramètres du projet Android d'IntelliJ IDEA
J'étais accro à la réécriture sur @ SpringApplicationConfiguration-> @SpringBootTest
À propos de la question pour laquelle j'étais accro à l'utilisation de hashmap
Un mémo sobrement accro à la demande de multipart / form-data
Mémorandum: Ce à quoi j'étais accro quand j'ai frappé l'API de comptabilité freee
[Rails] J'étais accro aux paramètres nginx lors de l'utilisation d'Action Cable.
Une histoire à laquelle j'étais accro lors du test de l'API à l'aide de MockMVC
J'étais accro à un simple test de Jedis (bibliothèque Java-> Redis)
Problèmes auxquels j'étais accro lors de la création de l'environnement digdag avec docker
J'étais accro au scrollview car je ne pouvais pas appuyer sur la taille variable UIView
J'étais accro aux tests unitaires avec l'opérateur de tampon dans RxJava
J'étais accro à l'utilisation de RXTX avec Sierra
Je veux var_dump le contenu de l'intention
J'étais accro à faire onActivityResult () avec DialogFragment
Une histoire à laquelle j'étais accro à deux reprises avec le paramètre de démarrage automatique de Tomcat 8 sur CentOS 8
J'étais accro à ne pas pouvoir me connecter à AWS-S3 à partir du conteneur Docker
J'étais un peu accro à la comparaison S3 Checksum, alors prenez note.
J'ai été englouti par l'obscurité de Romaji essayant de convertir mon nom en Romaji
05. J'ai essayé de supprimer la source de Spring Boot
J'ai essayé de réduire la capacité de Spring Boot
Je veux connaître la réponse de l'application Janken
[Rails] Je ne sais pas comment utiliser le modèle ...
Je souhaite afficher le nom de l'affiche du commentaire
J'étais accro à getXxxx de ResultSet car c'est un type primitif (Java)
Je veux retourner la position de défilement de UITableView!
Ce que j'ai corrigé lors de la mise à jour vers Spring Boot 1.5.12 ・ Ce à quoi j'étais accro
J'ai essayé de résumer les bases de kotlin et java
Ce à quoi j'étais accro en utilisant rspec sur des rails
J'étais accro à la configuration de default_url_options avec l'introduction de la conception de Rails
Je souhaite créer un modèle spécifique d'ActiveRecord ReadOnly
Je souhaite modifier le paramètre de sortie du journal de UtilLoggingJdbcLogger
J'ai brièvement résumé la grammaire de base de Ruby
J'ai essayé de créer un environnement de WSL2 + Docker + VSCode
J'étais étrangement accro à l'utilisation de l'API Stream de Java avec Scala
[Ruby] Je souhaite inverser l'ordre de la table de hachage
Une histoire dans laquelle j'étais accro à la conversion de type implicite d'ActiveRecord lors du test unitaire