95 votes

Puis-je configurer la suppression en cascade dans Rails?

Je sais que c'est probablement quelque part sur Internet mais je ne trouve pas la réponse sur Stackoverflow donc je pensais peut renforcer la base de connaissances un peu ici.

Je suis un débutant de Ruby et de Rails, mais mon entreprise est d'obtenir assez investi si je suis en train d'apprendre à le connaître un peu plus en détail.

Il a été difficile pour moi de changer mon état d'esprit à la conception d'une application à partir du "modèle" plutôt la base de données, donc je suis à essayer de comprendre comment faire tout le travail de conception que j'ai fait classiquement dans la Base de données dans les Rails plutôt que le modèle.

Donc, la tâche la plus récente que j'ai donné moi-même est de savoir comment configurer un Rails de modèle de base de données pour faire les suppressions en cascade? Est-il un moyen facile de faire cela? Ou je dois aller dans le MySql et le configurer?

Merci.

-Matt

108voto

Mike Breen Points 1434

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

 has_many :memberships, :dependent => :delete_all
 

68voto

danmayer Points 2581

Oui, vous pouvez, si vous utilisez une relation comme has_many, vous venez de le faire

has_many: adhésions,: dépendant =>: détruire

10voto

Jarin Udom Points 956

N'oubliez pas que delete_all n'exécutera aucun rappel (comme before_destroy et after_destroy) sur les enregistrements enfants.

6voto

Sean McMains Points 9311

Il semble que ce plugin puisse vous donner ce que vous cherchez si vous voulez que les suppressions en cascade soient reflétées dans la structure de base de données actuelle:

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

Le format pour utiliser ceci dans une migration ressemblerait à ceci:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X