【问题标题】:Mongoid::Paranoia delete associationsMongoid::Paranoia 删除关联
【发布时间】:2013-03-26 13:12:18
【问题描述】:

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 恢复

谢谢!

【问题讨论】:

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


    【解决方案1】:

    您可以覆盖由Mongoid::Paranoia 提供的User 中的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! 也将永久删除它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多