destroy
esegue callback modello e quindi esegue una query REMOVE sul DB.
delete
esegue semplicemente una query REMOVE sul DB.
I nomi sono presi da ActiveRecord
, è per questo che non corrispondono molto bene a mongo.
È possibile vedere delete
come ottimizzazione su destroy
. Quando si utilizza destroy
, si assicura che vengano eseguite le richiamate before_destroy
, quindi viene eseguita una corretta pulizia. D'altra parte, se fai qualcosa come Model.destroy_all
, deve caricare TUTTI gli elementi, e quindi fare una query REMOVE per ognuno di essi, sia che Model.delete_all
faccia una sola query.
quindi se non ho alcuna richiamata sono la stessa cosa? –
Sì, probabilmente prenderei in considerazione l'uso di 'destroy'. Se si aggiunge una richiamata, è necessario ricordarsi di cambiarla da 'delete' a' destroy' a meno che non si desideri eseguire effettivamente la callback. –
No, non sono la stessa cosa anche se non si dispone di callback. Poiché 'destroy' dipende dai callback, deve caricare il documento correlato per eseguire i callback e fare la query DELETE. 'delete' fa solo una query DELETE. Quindi, destroy è "più sicuro", ma delete è "più veloce" – tothemario