Bagaimana cara menghapus semua catatan di salah satu tabel basis data saya di aplikasi Ruby on Rails?
Bagaimana cara menghapus semua catatan di salah satu tabel basis data saya di aplikasi Ruby on Rails?
Jawaban:
Jika Anda mencari cara untuk melakukannya tanpa SQL Anda harus dapat menggunakan delete_all.
Post.delete_all
atau dengan kriteria
Post.delete_all "person_id = 5 AND (category = 'Something' OR category = 'Else')"
Lihat di sini untuk informasi lebih lanjut.
Catatan dihapus tanpa memuatnya terlebih dahulu yang membuatnya sangat cepat tetapi akan merusak fungsionalitas seperti penghitung cache yang tergantung pada kode rel yang akan dieksekusi pada penghapusan.
ActiveRecord
model. Pertanyaannya bertanya tentang menghapus catatan dari 'tabel' dan saya hanya menunjuk atau asumsi yang ada dalam jawaban.
Jika Anda bermaksud menghapus setiap instance dari semua model, saya akan menggunakan
ActiveRecord::Base.connection.tables.map(&:classify)
.map{|name| name.constantize if Object.const_defined?(name)}
.compact.each(&:delete_all)
select
setiap kali Anda perlu menggunakan ekspresi if di dalam blok, dengan cara ini Anda menghindari harus memadukan metode ringkas untuk menghapus elemen nil.
BlogPost.find_each(&:destroy)
Jika model Anda disebut BlogPost, itu akan menjadi:
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)
Jawaban yang lebih baru jika Anda ingin menghapus setiap entri di setiap tabel:
def reset
Rails.application.eager_load!
ActiveRecord::Base.descendants.each { |c| c.delete_all unless c == ActiveRecord::SchemaMigration }
end
Informasi lebih lanjut tentang di eager_load
sini .
Setelah memanggilnya, kita dapat mengakses semua keturunan ActiveRecord::Base
dan kita dapat menerapkan delete_all
semua model.
Perhatikan bahwa kami pastikan tidak menghapus tabel SchemaMigration.