Bagaimana Anda menghapus objek ActiveRecord?
Saya melihat Querying Rekaman Aktif dan tidak ada yang bisa dihapus yang bisa saya lihat.
Hapus oleh
id
,Menghapus objek saat ini seperti:
user.remove
,Bisakah Anda menghapus berdasarkan
where
klausa?
Bagaimana Anda menghapus objek ActiveRecord?
Saya melihat Querying Rekaman Aktif dan tidak ada yang bisa dihapus yang bisa saya lihat.
Hapus oleh id
,
Menghapus objek saat ini seperti: user.remove
,
Bisakah Anda menghapus berdasarkan where
klausa?
Jawaban:
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
, dan destroy_all
.
Dokumen tersebut adalah: dokumen lama dan dokumen Rails 3.0.0
delete
tidak instantiate objek, sementara destroy
tidak. Secara umum, delete
lebih cepat dari destroy
.
delete
lebih cepat tetapi melewati callback yang mungkin Anda tetapkan pada model
User.destroy
User.destroy(1)
akan menghapus pengguna dengan id == 1
dan :before_destroy
dan :after_destroy
panggilan balik terjadi. Misalnya jika Anda memiliki catatan terkait
has_many :addresses, :dependent => :destroy
Setelah 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>)
atau User.delete_all(<conditions>)
Perhatikan : Pengguna adalah kelas dan pengguna adalah objek contoh
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 satu DELETE FROM...
perintah.