ठीक मैनुअल से :
तो :delete_all
विदेशी कुंजी का ख्याल रखता है, लेकिन चूंकि कोई कॉलबैक नहीं लगाया जाता है, यह केवल एक स्तर गहरा होता है। तो यह Company
. में :
has_many :projects, dependent: :delete_all
इसका मतलब है कि कॉल करना #destroy
किसी कंपनी पर सीधे संबद्ध projects
को हटा देगा डेटाबेस से। लेकिन वह यह नहीं देखेगा:
has_many :tasks, dependent: :delete_all
जो आपके पास projects
. में है और अंत में आप उन परियोजनाओं को हटाने का प्रयास करते हैं जो अभी भी tasks
. में संदर्भित हैं जैसा कि त्रुटि संदेश इंगित करता है।
आप अपने सभी संघों को dependent: :destroy
. पर स्विच कर सकते हैं , यह उन्हें नष्ट करने से पहले डेटाबेस से सब कुछ खींच लेगा और कॉलबैक कहा जाएगा (जो डेटाबेस से अधिक चीजों को केवल उन्हें नष्ट करने के लिए लोड करेगा जो डेटाबेस से अधिक चीजें लोड करेगा ...) अंतिम परिणाम बहुत सारी डेटाबेस गतिविधि होगी लेकिन सभी विदेशी कुंजियों का ठीक से पालन किया जाएगा।
वैकल्पिक रूप से, आप तर्क को डेटाबेस के अंदर रख सकते हैं जहां यह आमतौर पर on delete cascade
विदेशी कुंजी बाधाओं पर
:
आपका add_foreign_key
कॉल इस तरह दिखाई देंगे:
add_foreign_key "projects", "companies", on_delete: :cascade
add_foreign_key "tasks", "projects", on_delete: :cascade
add_foreign_key "task_times", "tasks", on_delete: :cascade
इस मामले में। आप शायद dependent: :delete_all
. को छोड़ना चाहेंगे आपके मॉडल में क्या हो रहा है, इसके बारे में एक अनुस्मारक के रूप में, या आप स्वयं एक टिप्पणी छोड़ सकते हैं।