[RUBY] [Rails] Les messages ne peuvent pas être supprimés lorsqu'ils sont commentés! ??

Contexte de l'affichage

Je crée des SNS comme Twitter et Fb. J'ai ajouté un bouton de suppression à la fonction de publication ... ** Je ne peux pas supprimer la publication! !! ** **

Plus en détail, vous ne pouvez supprimer qu'un article. Publier une photo dans un article (uniquement si elle est divisée en un modèle d'article et un modèle d'image) Si vous commentez un message, vous ne pourrez pas le supprimer. ..

** [Caractères d'aujourd'hui] ** (Parent) post model → model pour enregistrer les posts Modèle d'image (enfant) → Un modèle qui enregistre les images associées aux articles (Enfant) modèle de commentaire → Modèle pour enregistrer les commentaires pour les articles

En d'autres termes, si une valeur est saisie dans le ** modèle enfant (modèle d'image, modèle de commentaire) ** imbriqué dans le ** modèle de publication **, l'enregistrement de publication ne peut pas être supprimé.

Jetons un coup d'œil au code réel.

Code réel

post.rb


class Post < ApplicationRecord
  belongs_to :user
  has_many :comments
  has_many :images
end

C'est une association post-modèle non conventionnelle. Cependant, s'il est laissé tel quel, le modèle parent ne peut pas être effacé lorsqu'une valeur est entrée dans le modèle enfant. Parce que si le parent disparaît, ** le parent de l'enfant disparaîtra **. .. C'est naturel lol

En d'autres termes, lorsque vous supprimez un parent, vous pouvez également définir l'enfant à supprimer **.

Solution

Définissons ** "dependant :: destroy" ** dans le modèle. dépendant ... Traduit, c'est "dépendant". Je pense que c'est facile d'obtenir une image.

Le modèle défini au moment de l'association sera supprimé lorsque la classe sera supprimée. Je ne sais pas ce que vous dites, je vais en fait l'écrire ci-dessous.

Code après résolution

post.rb


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

Avez-vous compris d'une manière ou d'une autre? Vous avez défini le ** modèle d'image ** et le ** modèle de commentaire ** dans la ** classe Post **. Lorsque le modèle de publication (publication) est supprimé, le modèle (image, commentaire) pour lequel ** dependant :: destroy ** est défini dans l'association est également supprimé.

point important

Il y a quelque chose dont je voudrais que vous soyez conscient à ce sujet. En fait, ce ** depend :: destroy ** n'est pas un paramètre pour supprimer les modèles enfants.

C'est un paramètre pour supprimer une association.

Par exemple, écrivons ce qui suit dans le modèle de commentaire.

comment.rb


belongs_to :post, dependent: :destroy

Si cela se produit, si vous supprimez le commentaire, ** le message sera également supprimé **.

Je vais le répéter. ** Les modèles configurés au moment de l'association seront supprimés lorsque la classe est supprimée. ** **

Résumé

Merci d'avoir lu ma pauvre explication jusqu'au bout. Si vous avez des erreurs ou des suppléments, je vous serais reconnaissant de bien vouloir commenter.

De plus en plus.

Recommended Posts

[Rails] Les messages ne peuvent pas être supprimés lorsqu'ils sont commentés! ??
Mesure lorsque le modèle ne peut pas être créé
[Rails 6] MySQL 2 ne peut pas regrouper l'installation
Tutoriel Rails Lorsque les rails neufs ne peuvent pas être réalisés en raison de versions différentes
Pièges inattendus lorsque les images ne peuvent pas être affichées
Le serveur Rails ne peut pas être démarré dans Cloud9
[Android] Solution lorsque l'appareil photo ne peut pas être démarré sur Android 9
[Rails] Lorsque vous utilisez ajax, faites attention aux "mesures CSRF".
Remarque lorsque pip install mysqlclient ne peut pas être installé sur Mac
Faites attention au moment d'initialisation lors de l'utilisation de MessageEncryptor avec Rails 5.2 / 6.0
[rails] Problèmes qui ne peuvent pas être enregistrés / connectés avec l'appareil
Évitez le problème que la session ne peut pas être obtenue lorsque Canary est libéré lors de la mise à niveau de Rails 4.2.x vers 5.0.x