Mongoid зависимый: уничтожить против: удалить - PullRequest
13 голосов
/ 31 марта 2012

При использовании ссылочных выпусков Mongoid, в чем разница между зависимым детрой и зависимым удалением, поскольку в документах это говорит:

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

Ответы [ 2 ]

25 голосов
/ 31 марта 2012

В Mongoid (а также ActiveRecord, я считаю), delete просто удаляет объект из базы данных.destroy удалит объект и запустит все соответствующие обратные вызовы, определенные моделью.Поэтому, если у вас есть before_destroy обратный вызов для модели и вы delete экземпляр этой модели, обратный вызов before_destroy не будет вызван.dependent: :delete нет.

3 голосов
/ 15 апреля 2014
  • destroy выполняет обратные вызовы модели и затем выполняет запрос REMOVE к БД.
  • delete просто выполняет запрос REMOVE к БД.

имена взяты из ActiveRecord, поэтому они не очень хорошо соответствуют монго.

Вы можете увидеть delete как оптимизацию по сравнению с destroy.Когда вы используете destroy, вы гарантируете, что выполняются обратные вызовы before_destroy, поэтому выполняется правильная очистка.С другой стороны, если вы делаете что-то вроде Model.destroy_all, он должен загрузить ВСЕ элементы, а затем сделать запрос REMOVE для каждого из них, независимо от того, выполняет ли Model.delete_all только один запрос.

...