2011-09-26 4 views
4

Existe-t-il des rappels pour une suppression en douceur dans Mongoid? Parce que before_destory ne sera pas déclenché.Mongoid: before_destroy et Paranoia

Maintenant, je pensais que je peux utiliser before_update mais il semble pas si solution claire que je veux et ce n'est pas déclenchée et

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 

La seule solution est de l'appeler de détruire l'action dans le contrôleur?

Répondre

2

Mongoid prend en charge les documents paranoïaques.

Ce que vous faites est inclure le mixin Paranoia:

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

Ensuite, observer les nouvelles fonctionnalités suivantes:

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. 

Vous pouvez trouver ces informations dans la partie supplémentaire de la documentation sur le site mogoid here.

2

Ce que je fait est:

def delete_with_callbacks 
    run_callbacks(:destroy) { delete_without_callbacks } 
end 
alias_method_chain :delete, :callbacks 
1

Comme Tyler mentionné, vous pouvez utiliser Mongoid::Paranoia. Cela vous donnera une autre option ::

message.remove 

Pour vérifier s'il a été supprimé ou non, vous pouvez utiliser message.destroyed?.

De plus, Message.deleted irait chercher tous les enregistrements Soft Deleted (enlevés) de la classe Message.

Visitez leur beau documentation avec ce one.