Puis-je configurer la suppression en cascade dans Rails?

Je sais que c’est probablement sur Internet quelque part, mais je ne trouve pas la réponse ici sur Stackoverflow, alors j’ai pensé que je pourrais augmenter un peu la base de connaissances ici.

Je suis un débutant chez Ruby and Rails, mais mon entreprise y est très bien investie, alors j’essaie de la connaître un peu plus en détail.

Il m’a été difficile de changer mon état d’esprit en concevant une application à partir du «modèle» plutôt que de la firebase database, alors j’essaye de comprendre Modèle Rails à la place.

Donc, la tâche la plus récente que je me suis donnée est de savoir comment configurer un modèle de firebase database Rails pour effectuer des suppressions en cascade? Y a-t-il un moyen facile de faire ça? Ou devrais-je aller dans MySql et configurer cela?

Merci.

-Mat

vous pouvez également définir l’option: dependive sur: delete_all. : delete_all émettra une seule instruction SQL pour supprimer tous les enregistrements enfants. à cause de cela, utilisez: delete_all peut vous donner de meilleures performances.

has_many :memberships, dependent: :delete_all 

Oui, vous pouvez, si vous utilisez une relation comme has_many vous faites juste ça

 has_many :memberships, dependent: :destroy 

Contrairement à la réponse fournie, je suggère fortement de le faire également au niveau de la firebase database. Si vous avez des processus différents ou un environnement multi-thread, il se peut que les enregistrements ne soient pas correctement supprimés. De plus, la clé étrangère de la firebase database accélère la suppression de nombreuses données.

Comme dans la réponse proposée, faites ceci:

 has_many :memberships, dependent: :delete_all 

Cependant, assurez-vous également de configurer une foreign_key dans une migration. De cette façon, la firebase database prend soin de supprimer automatiquement les enregistrements pour vous.

Pour annuler les valeurs lorsqu’une appartenance est supprimée, en supposant que vous ayez un modèle d’utilisateur:

 add_foreign_key :users, :memberships, on_delete: :nullify 

Vous pouvez également supprimer tous les modèles chaque fois qu’un abonnement est supprimé.

 add_foreign_key :users, :memberships, on_delete: :cascade 

Gardez à l’esprit que delete_all n’exécutera aucun callback (comme before_destroy et after_destroy) sur les enregistrements enfants.

Il semble que ce plugin puisse vous donner ce que vous recherchez si vous souhaitez que les suppressions en cascade soient reflétées dans la structure de la firebase database:

http://www.redhillonrails.org/foreign_key_migrations.html

Le format pour utiliser ceci dans une migration serait quelque chose comme ceci:

 create_table :orders do |t| t.column :customer_id, :integer, :on_delete => :set_null, :on_update => :cascade ... end