1

user.rb模型Mongoid ::偏执狂删协会

class User 
    include Mongoid::Document 
    include Mongoid::Paranoia 
    has_many :posts, dependent: :destroy, :autosave => true 
end 

post.rb模型

class Post 
    include Mongoid::Document 
    belongs_to :user 
    field :title 
end 

如果我运行在控制台的下一个命令:

irb(main):020:0> u = User.first 
=> #object here 
irb(main):021:0> u.delete 
=> true 
irb(main):022:0> u.posts 
=> nil 

如果我尝试致电用户帖子我可以看到所有用户帖子已被删除。我想删除所有用户帖子只有如果用户永久从我的数据库销毁u.destroy

如何,我可以让我的数据库中所有相关的对象里面,如果我删除的对象与Mongoid::Paranoiau.delete该对象可以用u.restore

感谢后恢复!

回答

3

可以覆盖remove methodUserMongoid::Paranoia提供,因此省略了cascade!电话:

def remove(options = {}) 
    # don't cascade the remove call 
    # cascade! 
    time = self.deleted_at = Time.now 
    paranoid_collection.find(atomic_selector). 
     update({ "$set" => { paranoid_field => time }}) 
    @destroyed = true 
    IdentityMap.remove(self) 
    Threaded.clear_options! 
    true 
    end 
    alias :delete :remove 

现在u.delete将保留所有相关联的帖子完整和u.delete!将永久删除他们。