2010-11-01 12 views
6

को नष्ट करें मैंने कुछ प्लगइन की सहायता से एक रेल 3 ऑडिटॉग बनाया है, जो ऑडिटलॉग तालिका में डेटा को पहचान के लिए निम्नलिखित फ़ील्ड के साथ संग्रहीत करता है (feeded_id, feeded_type)has_many के साथ रिकॉर्ड को कैसे नष्ट करें,: निर्भर =>:

तो मेरे मामले में, मेरे पास एक फोटोबल्म है जिसमें कई तस्वीरें हैं।

class PhotoAlbum < ActiveRecord::Base 
has_many :photos, :dependent => :destroy 

जब मैं एक photoalbum हटाना (आईडी = 2) यह बहुत ही अच्छी तरह से सभी संबद्ध फ़ोटो को हटाने के लिए काम करता है, लेकिन यह है कि इस तरह कर रहे हैं AuditLog से आइटम हटा नहीं है: (feeded_id = 2, feeded_type = PhotoAlbum)

यह देखते हुए कि ऑडिटॉग तालिका में "photo_album_id" कॉलम नहीं है, और नहीं, क्या एक आश्रित सेट अप करने का कोई तरीका है> teh AuditLog में सभी संबंधित आइटम्स को हटाने के लिए रेल के साथ गंतव्य जब एक फोटोअल्बम हटा दिया जाता है ?

धन्यवाद, मुझे पता है कि यह सबसे अधिक जटिल है। इसके माध्यम से पढ़ने के लिए धन्यवाद!

उत्तर

4

मुझे लगता है कि आप देख रहे हैं अपने PhotoAlbum कक्षा में

belongs_to :feeded, :polymorphic => true

अपने ऑडिट लॉग कक्षा में

और

has_many :logs, :as => :feeded, :dependent => :destroy

का संयोजन है।

यदि आपके पास अपने ऑडिट लॉग का प्रतिनिधित्व करने के लिए कोई कक्षा नहीं है, तो आप मौजूदा कक्षा में belongs_to को जोड़ने में सक्षम होना चाहिए (शायद आपके प्लगइन में?)।

मैं इस बारे में 100% निश्चित नहीं हूं: as =>: फीड विकल्प, आपको उस प्रतीक को सही ढंग से नाम देना होगा और मुझे यकीन नहीं है कि ActiveRecord क्या अपेक्षा करेगा, लेकिन belongs_to संबंध feeded_id और feeded_type की तलाश करेगा, इसलिए जब 'पैरेंट' ऑब्जेक्ट एक फोटोअल्बम है तो यह photo_album.id = audit_logs.feeded_id AND audit_logs.feeded_type = 'PhotoAlbum' पर सही ढंग से जुड़ जाएगा। चूंकि इसके लिए आपके डेटाबेस में किसी भी बदलाव की आवश्यकता नहीं है, इसलिए आपके सभी मौजूदा कोड को काम करना जारी रखना चाहिए।

आप options for associations here पर पढ़ सकते हैं।

संबंधित मुद्दे