При использовании реферирования, наложенного Mongoid, понимается, что разница между зависимым detroy и зависимым удалением, поскольку в документах он сообщает:
:delete: Delete the child documents.
:destroy: Destroy the child documents.
Ответ 1
В Mongoid (а также ActiveRecord, я считаю), delete просто удаляет объект из базы данных. destroy удалит объект и запустит все соответствующие обратные вызовы, которые определила модель. Поэтому, если у вас есть обратный вызов before_destroy для модели, и вы delete экземпляр этой модели, обратный вызов before_destroy не будет вызываться.
Итак, dependent: :destroy запускает обратные вызовы модели при удалении, а dependent: :delete - нет.
Ответ 2
destroy запускает обратные вызовы модели, а затем делает запрос REMOVE в БД.
delete просто делает запрос REMOVE в БД.
Имена взяты из ActiveRecord, поэтому они не очень хорошо сочетаются с манго.
Вы могли видеть delete как оптимизацию по сравнению с destroy. Когда вы используете destroy, вы выполняете обратные вызовы before_destroy, поэтому выполняется правильная очистка. С другой стороны, если вы делаете что-то вроде Model.destroy_all, ему нужно загрузить ВСЕ элементы, а затем сделать запрос REMOVE для каждого из них, вне зависимости от того, Model.delete_all делает только один запрос.