Ini destroy
dan destroy_all
metode, seperti
user.destroy
User.find(15).destroy
User.destroy(15)
User.where(age: 20).destroy_all
User.destroy_all(age: 20)
Atau Anda dapat menggunakan delete
dan delete_all
yang tidak akan memberlakukan :before_destroy
dan :after_destroy
panggilan balik atau opsi asosiasi yang tergantung.
User.delete_all(condition: 'value')
akan memungkinkan Anda untuk menghapus catatan tanpa kunci utama
Catatan : dari komentar @ hammady, user.destroy
tidak akan berfungsi jika Model pengguna tidak memiliki kunci utama.
Catatan 2 : Dari komentar @ pavel-chuchuva, destroy_all
dengan kondisi dan delete_all
kondisi telah usang dalam Rails 5.1 - lihat panduan.rubyonrails.org/5_1_release_notes.html
User.find_by(username:"bob")
bagus untuk mengidentifikasi catatan untuk dihancurkan atau dihapus juga.Ada
delete
,delete_all
,destroy
, dandestroy_all
.Dokumen tersebut adalah: dokumen lama dan dokumen Rails 3.0.0
delete
tidak instantiate objek, sementaradestroy
tidak. Secara umum,delete
lebih cepat daridestroy
.sumber
delete
lebih cepat tetapi melewati callback yang mungkin Anda tetapkan pada modelUser.destroy
User.destroy(1)
akan menghapus pengguna denganid == 1
dan:before_destroy
dan:after_destroy
panggilan balik terjadi. Misalnya jika Anda memiliki catatan terkaitSetelah pengguna dihancurkan, alamatnya akan dihancurkan juga. Jika Anda menggunakan tindakan hapus sebagai gantinya, panggilan balik tidak akan terjadi.
User.destroy
,User.delete
User.destroy_all(<conditions>)
atauUser.delete_all(<conditions>)
Perhatikan : Pengguna adalah kelas dan pengguna adalah objek contoh
sumber
User.destroy_all()
menjalankan panggilan balik, jadi sebelum menghapus apa pun, ia memuat catatan. Ini dua pernyataan SQL, bukan satu. Selain implikasi kinerja, ini juga memiliki implikasi konkurensi. Panggilan yang lebih aman akan melewatkan panggilan balik;User.delete_all()
akan mengeluarkan hanya satuDELETE FROM...
perintah.