Монгоид-зависимый: destroy vs: delete
При использовании реферирования, наложенного 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
делает только один запрос.