1

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

谢谢!

4

1 回答 1

3

您可以覆盖由提供的remove方法,以便省略调用:UserMongoid::Paranoiacascade!

  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!并将其永久删除。

于 2013-03-26T17:00:05.710 回答