module Mongoid::Persistable::Destroyable

Defines behavior for persistence operations that destroy documents.

Public Instance Methods

destroy(options = nil) click to toggle source

Remove the document from the database with callbacks.

@example Destroy a document.

document.destroy

@param [ Hash ] options The options. @option options [ true | false ] :persist Whether to persist

the delete action. Callbacks will still be run even if false.

@option options [ true | false ] :suppress Whether to update

the parent document in-memory when deleting an embedded document.

@return [ true | false ] True if successful, false if not.

# File lib/mongoid/persistable/destroyable.rb, line 23
def destroy(options = nil)
  raise Errors::ReadonlyDocument.new(self.class) if readonly?
  self.flagged_for_destroy = true
  result = run_callbacks(:commit, skip_if: -> { in_transaction? }) do
    run_callbacks(:destroy) do
      if catch(:abort) { apply_destroy_dependencies! }
        delete(options || {}).tap do |res|
          if res && in_transaction?
            Threaded.add_modified_document(_session, self)
          end
        end
      else
        false
      end
    end
  end
  self.flagged_for_destroy = false
  result
end
destroy!(options = {}) click to toggle source

Remove the document from the database with callbacks. Raises an error if the document is not destroyed.

@example Destroy a document.

document.destroy!

@param [ Hash ] options The options. @option options [ true | false ] :persist Whether to persist

the delete action. Callbacks will still be run even if false.

@option options [ true | false ] :suppress Whether to update

the parent document in-memory when deleting an embedded document.

@raises [ Mongoid::Errors::DocumentNotDestroyed ] Raised if

the document was not destroyed.

@return [ true ] Always true.

# File lib/mongoid/persistable/destroyable.rb, line 59
def destroy!(options = {})
  destroy(options) || raise(Errors::DocumentNotDestroyed.new(_id, self.class))
end