1
0

More than 1 year has passed since last update.

【Rails で論理削除】paranoid | paranoia を使わないで discard gem を使う理由

Posted at

【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 のほうがスター数多いのトラップすぎると思った

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0