ฉันจะลบระเบียนทั้งหมดในตารางฐานข้อมูลของฉันในแอป Ruby on Rails ได้อย่างไร
ฉันจะลบระเบียนทั้งหมดในตารางฐานข้อมูลของฉันในแอป Ruby on Rails ได้อย่างไร
คำตอบ:
หากคุณกำลังมองหาวิธีการโดยไม่มี SQL คุณควรจะสามารถใช้ delete_all ได้
Post.delete_all
หรือด้วยเกณฑ์
Post.delete_all "person_id = 5 AND (category = 'Something' OR category = 'Else')"
ดูที่นี่สำหรับข้อมูลเพิ่มเติม
บันทึกจะถูกลบโดยไม่ต้องโหลดก่อนซึ่งทำให้เร็วมาก แต่จะทำลายฟังก์ชันการทำงานเช่นแคชตัวนับซึ่งขึ้นอยู่กับรหัสรางที่จะดำเนินการเมื่อลบ
ActiveRecordแบบจำลอง คำถามถามเกี่ยวกับการลบบันทึกจาก 'ตาราง' และฉันแค่ชี้หรือสมมติฐานที่อยู่ในคำตอบ
                    เพื่อลบผ่าน SQL
Item.delete_all # accepts optional conditions
ในการลบโดยเรียกเมธอดการทำลายของแต่ละรุ่น (มีราคาแพง แต่เรียกการเรียกกลับ)
Item.destroy_all # accepts optional conditions
ทั้งหมดที่นี่
หากคุณต้องการล้างฐานข้อมูลทั้งหมดและไม่เพียง แต่ลบโมเดลหรือโมเดลที่แนบมาเท่านั้นคุณสามารถทำได้:
rake db:purge
คุณสามารถทำได้บนฐานข้อมูลทดสอบ
rake db:test:purge
              ถ้าคุณหมายถึงลบทุกอินสแตนซ์ของทุกรุ่นฉันจะใช้
ActiveRecord::Base.connection.tables.map(&:classify)
  .map{|name| name.constantize if Object.const_defined?(name)}
  .compact.each(&:delete_all)
              selectเมื่อใดก็ตามที่คุณต้องการใช้นิพจน์ if ภายในบล็อกวิธีนี้จะช่วยให้คุณไม่ต้องเชื่อมโยงวิธีการกระชับเพื่อลบองค์ประกอบศูนย์
                    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และเราสามารถใช้ a delete_allกับทุกรุ่นได้
โปรดทราบว่าเราไม่ได้ล้างตาราง SchemaMigration