[RUBY] Comment supprimer des données avec une clé externe

environnement

Cet article utilise Ruby 2.6.5 installé sur macOS Catalina 10.15.6.

supposition

Nous avons créé trois modèles et la situation est la suivante.

Utilisateur / Utilisateur Rapport / Rapport Tableau d'association commentaire / rapport utilisateur

L'erreur suivante s'est produite lors de la suppression d'un rapport contenant des commentaires.

Erreur est survenue

ActiveRecord::InvalidForeignKey in ReportsController#destroy Erreur de clé externe スクリーンショット 2020-10-22 10.00.46.png

Pensez à la solution à la cause.

Cause

Lors de la suppression d'un rapport, il est déterminé que la cause est que l'utilisateur dans la table de commentaires et la valeur d'id du rapport sont perdus. (En raison de contraintes clés externes) Je souhaite pouvoir supprimer des commentaires si l'utilisateur et l'ID de rapport ne sont plus associés.

Solution

dependent: :Décrivez la destruction dans le modèle utilisateur et le modèle de rapport.


 Avec cette description, lorsque vous supprimez le modèle parent (rapport), vous pouvez également supprimer le "modèle enfant (commentaire)" associé au modèle parent ".

## Vérification


#### **`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

Terminé sans incident! c'est tout. J'espère que cela aidera ceux qui ont des problèmes similaires ou qui se heurtent à un mur!

référence

J'ai fait référence à ce qui suit, donc si vous voulez comprendre le contenu plus en profondeur, jetez un œil! https://qiita.com/Ushinji/items/650fa295a3054d2fe582 https://qiita.com/ITmanbow/items/2170ccaceafd5d401df8 https://qiita.com/Tsh-43879562/items/fbc968453a7063776637

Recommended Posts

Comment supprimer des données avec une clé externe
Ajouter une clé externe à la colonne avec migrate
Comment renommer un modèle avec des contraintes de clé externes dans Rails
Comment supprimer une nomenclature (UTF-8)
Comment supprimer un objet new_record construit avec Rails
Comment numéroter (nombre) avec html.erb
Comment supprimer des images non balisées en masse avec Docker
Comment mettre à jour avec activerecord-import
[Rails] Comment écrire user_id (clé externe) dans un paramètre fort
Comment démarrer avec Slim
Remarques sur l'utilisation de Spring Data JDBC
[Rails] Différentes façons de supprimer des données
Comment entourer n'importe quel caractère avec "~"
Comment utiliser mssql-tools avec Alpine
[Débutant] Comment supprimer AUCUN FICHIER
Comment ajouter la fonction de suppression
Comment démarrer Camunda avec Docker
Comment supprimer de grandes quantités de données dans Rails et problèmes
Comment recadrer une image avec libGDX
Comment ajuster TextPosition avec l'extension de clavier iOS
Comment partager des fichiers avec Docker Toolbox
Comment compiler Java avec VsCode & Ant
[Java] Résumez comment comparer avec la méthode equals
Comment utiliser BootStrap avec Play Framework
[Java] Comment ajouter des données à la liste (add, addAll)
Comment changer d'images miniatures avec JavaScript
[Note] Comment démarrer avec Rspec
Comment faire un contrôle basé sur l'API avec cancancan
Comment réaliser le téléchargement de fichiers avec Feign
Comment mettre à jour les modèles associés avec accepte_nested_attributes_for
Comment définir JAVA_HOME avec l'appassembler-maven-plugin de Maven
Comment implémenter TextInputLayout avec la fonction de validation
Comment gérer les erreurs de connexion avec l'appareil
Comment tester l'étendue privée avec JUnit
Comment surveiller nginx avec docker-compose avec datadog
Comment écraser les données Firebase avec Swift
Comment gérer les actifs de précompilation a échoué.
Comment réaliser le téléchargement de fichiers avec Feign
Comment exécuter Blazor (C #) avec Docker
Comment créer un environnement Rails 6 avec Docker
Comment SSH dans Ubuntu à partir d'un terminal avec authentification par clé publique
[Java] Comment tester s'il est nul dans JUnit
Comment se moquer de chaque cas avec Mockito 1x
Comment se moquer de chaque cas avec PowerMock + Mockito1x
Comment utiliser MyBatis2 (iBatis) avec Spring Boot 1.4 (Spring 4)
Comment enregistrer dans plusieurs tables avec une seule entrée
Comment tester les interruptions pendant Thread.sleep avec JUnit
Comment utiliser h2db intégré avec Spring Boot
Comment supprimer un contrôleur, etc. à l'aide d'une commande
Comment utiliser le framework Java avec AWS Lambda! ??