Mongoid :: Paranoia删除关联

时间:2013-03-26 13:12:18

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2 mongoid

user.rb模型

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::Paranoia u.delete的对象,我怎样才能将所有相关对象保留在我的数据库内?对于此对象,可以稍后使用u.restore 进行恢复

谢谢!

1 个答案:

答案 0 :(得分:3)

您可以覆盖User提供的Mongoid::Paranoia中的remove method,以便省略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!也会永久删除它们。