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
whereklausa?
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 whereklausa?
Jawaban:
Ini destroydan destroy_allmetode, 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 deletedan delete_allyang tidak akan memberlakukan :before_destroydan :after_destroypanggilan 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.destroytidak akan berfungsi jika Model pengguna tidak memiliki kunci utama.
Catatan 2 : Dari komentar @ pavel-chuchuva, destroy_alldengan kondisi dan delete_allkondisi 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
deletetidak instantiate objek, sementara destroytidak. Secara umum, deletelebih cepat dari destroy.
deletelebih cepat tetapi melewati callback yang mungkin Anda tetapkan pada model
User.destroyUser.destroy(1)akan menghapus pengguna dengan id == 1dan :before_destroydan :after_destroypanggilan 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.