【Rails で論理削除】paranoid | paranoia を使わないで discard gem を使う理由
三行まとめ
User.destroy # 物理削除
Comment.destroy # 論理削除
☝️いやみわけつかん🥺
【悪い点】 paranoid | paranoia は rails の関数をオーバーライドする。
モデル側でacts_as_paranoid
という指定をすると、destroy が論理削除になる。
class Comment < ApplicationRecord
acts_as_paranoid
end
paranoid | paranoia のメリデメ
メリット
物理削除の時と名前が同じなので覚えやすい
デメリット
論理削除と物理削除のモデルが混在するとバグ埋め込む可能性が上がる
たとえば
- User.destroy = 物理削除
- Comment.destroy = 論理削除
という風に物理削除と論理削除を使うモデルが混在している場合が問題
呼び出し元で物理削除なのか論理削除なのかの判別ができないためバグを埋め込みやすい
paranoia | paranoid の感想
圧倒的にデメリットがきついと思った
なので別の方法を探してみて discard という gem にいきついた
discard gem を使う
discard gem では ActiveRecord の関数をオーバーライドしないので混乱しない。
- User.destroy = 物理削除 # 素のRailsと一緒
- Comment.discard = 論理削除 # include Discard::Model によって新しく追加される
こんな感じで物理削除するときの関数と論理削除をするときの関数が呼び出し元で明らかなのでバグの混入率が低い
感想
paranoia のほうがスター数多いのトラップすぎると思った