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 に答える