मैं रूबी ऐप पर एक रूबी में अपने डेटाबेस तालिकाओं में सभी रिकॉर्ड कैसे हटाऊं?
मैं रूबी ऐप पर एक रूबी में अपने डेटाबेस तालिकाओं में सभी रिकॉर्ड कैसे हटाऊं?
जवाबों:
यदि आप SQL के बिना इसके लिए एक रास्ता खोज रहे हैं तो आपको delete_all का उपयोग करने में सक्षम होना चाहिए।
Post.delete_all
या एक मापदंड के साथ
Post.delete_all "person_id = 5 AND (category = 'Something' OR category = 'Else')"
अधिक जानकारी के लिए यहाँ देखें ।
रिकॉर्ड्स को पहले लोड किए बिना डिलीट कर दिया जाता है जो इसे बहुत तेज़ बनाता है लेकिन काउंटर कैश जैसी कार्यक्षमता को तोड़ देगा जो डिलीट करने के लिए निष्पादित किए जाने वाले रेल कोड पर निर्भर करता है।
ActiveRecordमॉडल नहीं हैं। प्रश्न एक 'तालिका' से रिकॉर्ड हटाने के बारे में पूछता है और मैं केवल इंगित कर रहा हूं या उत्तर में आयोजित धारणा।
यदि आप सभी मॉडलों के हर उदाहरण को हटाते हैं, तो मैं उपयोग करूंगा
ActiveRecord::Base.connection.tables.map(&:classify)
.map{|name| name.constantize if Object.const_defined?(name)}
.compact.each(&:delete_all)
selectजब भी आपको किसी ब्लॉक के अंदर अभिव्यक्ति का उपयोग करने की आवश्यकता हो तो इस तरह से प्राथमिकता दें , इस तरह से आप शून्य तत्वों को निकालने के लिए कॉम्पैक्ट विधि को चेन करने से बचें।
BlogPost.find_each(&:destroy)
यदि आपका मॉडल BlogPost कहलाता है, तो यह होगा:
BlogPost.all.map(&:destroy)
MOPED: 127.0.0.1:27017 QUERY database=a_database collection=nothings selector={} flags=[:slave_ok] limit=0 skip=0 batch_size=nil fields=nil (0.3378ms)
उस मामले में अधिक हालिया उत्तर जिसे आप प्रत्येक तालिका में हर प्रविष्टि को हटाना चाहते हैं:
def reset
Rails.application.eager_load!
ActiveRecord::Base.descendants.each { |c| c.delete_all unless c == ActiveRecord::SchemaMigration }
end
eager_load यहाँ के बारे में अधिक जानकारी ।
इसे कॉल करने के बाद, हम सभी के वंशजों तक पहुंच सकते हैं ActiveRecord::Baseऔर हम delete_allसभी मॉडलों पर आवेदन कर सकते हैं।
ध्यान दें कि हम स्कीमा माइग्रेशन तालिका को साफ़ नहीं करना सुनिश्चित करते हैं।