Подтвердить что ты не робот

Монгоид-зависимый: destroy vs: delete

При использовании реферирования, наложенного Mongoid, понимается, что разница между зависимым detroy и зависимым удалением, поскольку в документах он сообщает:

:delete: Delete the child documents.
:destroy: Destroy the child documents.
4b9b3361

Ответ 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 делает только один запрос.