আমি কীভাবে আমার এক ডেটাবেস টেবিলের সমস্ত রেকর্ডটি রেল অন অ্যাপে রবিতে মুছব?
আমি কীভাবে আমার এক ডেটাবেস টেবিলের সমস্ত রেকর্ডটি রেল অন অ্যাপে রবিতে মুছব?
উত্তর:
আপনি যদি এসকিউএল ছাড়াই এর কোনও উপায় খুঁজছেন তবে আপনার মুছুন_আল ব্যবহার করা উচিত।
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.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সমস্ত মডেলগুলিতে একটি প্রয়োগ করতে পারি ।
নোট করুন যে আমরা স্কিমা অভিবাসন টেবিলটি সাফ না করার বিষয়টি নিশ্চিত করেছি।