Mongoid::Paranoiaで論理削除を実装する。

Mongoid::Paranoia使って論理削除ができる

class Person
  include Mongoid::Document
  include Mongoid::Paranoia
end

って書くと、persion.destroyしたときに、データは完全には削除されず、論理削除されるようになる。 物理削除は行われずdeleted_atに日付が入るようになる。

Persion.allなどとすると削除されたものは対象とならない。

削除したものをとってくる場合はdeletedメソッドでできる。

Persion.deleted

ただし、この場合は削除されたものしかとってこない。削除されていないものも削除されたものも両方ともとってきたい場合はunscopedを使用する

Persion.unscoped

unscopedが使えるようになったのは2.4.0以降。この経緯は以下のURLを参照にして。

https://github.com/mongoid/mongoid/issues/1359

http://d.hatena.ne.jp/hibariya/20110531/1306770478

ちなみに、この機能(Mongoid::Paranoia)はmongoid 4.0.0以降でサポートされなくなると思われる。