Mongoid: before_destroy и Паранойя - PullRequest
       3

Mongoid: before_destroy и Паранойя

4 голосов
/ 26 сентября 2011

Есть ли какие-то обратные вызовы для мягкого удаления в Mongoid?Потому что before_destory не будет срабатывать.

Теперь я подумал, что могу использовать before_update, но это выглядит не так понятно, как я хочу, и не срабатывает также

class Message
  include Mongoid::Document
  include Mongoid::Timestamps
  include Mongoid::Paranoia
  before_update :some_action

private

  def some_action
    if self.deleted_at_changed?
      ... # do my stuff
    end
  end
end

Таким образом, единственное решение - вызвать его из действия уничтожения в контроллере?

Ответы [ 3 ]

2 голосов
/ 23 февраля 2012

Что я сделал, это:

def delete_with_callbacks
  run_callbacks(:destroy) { delete_without_callbacks }
end
alias_method_chain :delete, :callbacks
2 голосов
/ 27 ноября 2011

Mongoid поддерживает параноидальные документы.

То, что вы делаете, включает в себя миксин паранойи:

class Person
  include Mongoid::Document
  include Mongoid::Paranoia
end

Затем обратите внимание на следующие новые функции:

person.delete # Sets the deleted_at field to the current time.
person.delete! # Permanently deletes the document.
person.destroy! # Permanently delete the document with callbacks.
person.restore # Brings the "deleted" document back to life.

Вы можетенайти эту информацию в дополнительной части документации на сайте mogoid здесь .

1 голос
/ 03 апреля 2012

Как упоминал Тайлер, вы можете использовать Mongoid::Paranoia.Это даст вам еще один вариант: *

message.remove

Чтобы проверить, был ли он удален или нет, вы можете использовать message.destroyed?.

. Также Message.deleted выберет вас всехмягко удаленные (удаленные) записи из класса Message.

Посетите их прекрасную документацию вместе с этой one .

...