Cả hai đều xóa bản ghi, nhưng đi qua hai đường khác nhau:
destroy: nạp object lên, chạy callbacks (before_destroy,after_destroy,after_commit) và xử lý association khai báodependent: :destroy. Đây là đường "an toàn" khi có logic phụ thuộc.delete: bắn thẳng một câu SQLDELETE, bỏ qua callbacks lẫn validations, không đụng tới bản ghi liên quan. Nhanh hơn nhưng nguy hiểm nếu model dựa vào callback để dọn dẹp.
ruby
user.destroy # chạy callback + xóa comment con (dependent: :destroy)
user.delete # chỉ 1 câu DELETE, không callback
User.where(active: false).destroy_all # nạp từng record, chạy callback
User.where(active: false).delete_all # 1 câu DELETE hàng loạt, bỏ callbackQuy tắc: cần callback/dọn dữ liệu liên quan → destroy.
Xóa số lượng lớn không có side-effect → delete/delete_all để tránh nạp N object.