Khi sử dụng Mongoid tham chiếu reletions diffrence giữa detroy phụ thuộc và phụ thuộc xóa là những gì từ trong tài liệu nó nói:Mongoid phụ thuộc: phá hủy vs: xóa
:delete: Delete the child documents.
:destroy: Destroy the child documents.
Khi sử dụng Mongoid tham chiếu reletions diffrence giữa detroy phụ thuộc và phụ thuộc xóa là những gì từ trong tài liệu nó nói:Mongoid phụ thuộc: phá hủy vs: xóa
:delete: Delete the child documents.
:destroy: Destroy the child documents.
Trong Mongoid (và cũng ActiveRecord Tôi tin), delete
chỉ loại bỏ đối tượng khỏi cơ sở dữ liệu. destroy
sẽ xóa đối tượng và chạy tất cả các cuộc gọi lại thích hợp mà mô hình đã xác định. Vì vậy, nếu bạn có một cuộc gọi lại before_destroy
trên mô hình và bạn delete
một phiên bản của mô hình đó, cuộc gọi lại before_destroy
sẽ không được gọi.
Vì vậy, dependent: :destroy
chạy lần gọi lại của mô hình khi xóa và dependent: :delete
thì không.
destroy
chạy gọi lại mô hình và sau đó thực hiện truy vấn XÓA đối với DB.delete
chỉ cần thực hiện truy vấn XÓA đối với DB.Tên được lấy từ ActiveRecord
, đó là lý do tại sao chúng không khớp với mongo rất tốt.
Bạn có thể thấy delete
làm tối ưu hóa trên destroy
. Khi bạn sử dụng destroy
, bạn đảm bảo rằng các cuộc gọi lại before_destroy
được thực hiện, vì vậy việc dọn dẹp hoàn toàn được thực hiện. Mặt khác, nếu bạn làm một cái gì đó như Model.destroy_all
, nó phải tải tất cả các phần tử, và sau đó thực hiện một truy vấn loại bỏ cho mỗi phần tử, cho dù Model.delete_all
chỉ tạo một truy vấn.
vì vậy nếu tôi không có bất kỳ cuộc gọi lại nào thì chúng giống nhau? –
Vâng, tôi có lẽ sẽ xem xét sử dụng 'phá hủy'. Nếu bạn đã từng thêm một cuộc gọi lại, bạn cần phải nhớ thay đổi nó từ 'delete' thành' destroy' trừ khi bạn không muốn gọi lại thực sự chạy. –
Không có chúng không giống nhau ngay cả khi bạn không có gọi lại. Bởi vì 'destroy' phụ thuộc vào callbacks, nó phải load tài liệu liên quan để thực thi callbacks, và thực hiện truy vấn DELETE. 'delete' chỉ tạo một truy vấn DELETE. Sau đó, tiêu diệt là "an toàn hơn", nhưng xóa là "nhanh hơn" – tothemario