سؤال

يبدو أن التدمير يعتمد على ما يبدو => عند استخدام الخيار من خلال: من خلال.

لذلك لدي هذا ...

class Comment < ActiveRecord::Base
  has_many :comment_users, :dependent => :destroy
  has_many :users, :through => :comment_users
  ...
end

... لكن حذف التعليق لا يؤدي إلى حذف سجلات Comment_user المرتبطة.

ما هو النهج الموصى به ، إذن ، لحذف Cascade عند استخدام: من خلال؟

شكرًا

هل كانت مفيدة؟

المحلول

على ما يبدو: لا يتم تجاهل المعال!

كانت القضية الحقيقية أنني كنت أتصل Comment.delete(id) الذي يذهب مباشرة إلى DB ، بينما أنا الآن أستخدم Comment.destroy(id) الذي يحمل كائن التعليق والمكالمات تدمير () عليه. هذا يلتقط :dependent => :destroy وكل شيء على ما يرام.

نصائح أخرى

حل الملصق الأصلي صالح ، لكنني أردت أن أشير إلى أن هذا يعمل فقط إذا كان لديك عمود معرف لهذا الجدول. أنا أفضل أن تكون طاولاتي العديدة إلى العدد هي المفتاحين الأجنبيين فقط ، لكن اضطررت إلى إزالة "ID: FALSE" من تعريف جدول الترحيل لحذف التتابع للعمل. من المؤكد أن وجود هذه الوظيفة يفوق عدم وجود عمود معرّف على الجدول.

إذا كان لديك رابطة متعددة الأشكال ، فيجب عليك فعل ما قاله plogofsongs ولكن مع سمة أجنبية مثل ذلك:

class User < ActiveRecord::Base
  has_many :activities , dependent: :destroy, foreign_key: :trackable_id
end
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top