تعتمد => تدمير على جمعية "has_many من خلال"
-
22-09-2019 - |
سؤال
يبدو أن التدمير يعتمد على ما يبدو => عند استخدام الخيار من خلال: من خلال.
لذلك لدي هذا ...
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