とんてき

Ruby, Ruby on Railsやその周辺技術を中心に。ときどき趣味のことも。

Railsで論理削除を実装したい時は「paranoia」Gemを使おう!

はじめに

このデータ(レコード)要らないと思って削除したはいいが、あとで戻したいなんてことありますよね?
Railsチュートリアル等を見ると、destroyメソッドでレコードを物理削除したりしていますが、
完全に消すのは怖いという場合、論理削除をすることをおすすめします。
paranoia」というGemを使用するとこれが簡単に実装できてしまいます!
それでは見ていきましょう!

1. Gemをインストール

Gemfileに以下を追記する

gem 'paranoia'

bundle installする

2. 論理削除用のカラムを追加

migrationファイルの作成
※ 以下では、migrationファイルを生成するときにカラム名と型を指定しています。

rails g migration add_column_to_テーブル名 deleted_at:datetime

migrationを行う

rails db:migrate

3. モデルに独自のメソッドを追記

class Post < ApplicationRecord
    acts_as_paranoid
end

終わりに

これでdestroyメソッドで削除しようとすると、先ほど追加した「deleted_at」に日時が入り、物理的にレコードは削除されません。
※ 本当に物理削除したい場合は、「really_destroy」メソッドを使用すると物理削除をすることができます。

めちゃくちゃ簡単でしたね!
本当にRailsのGemは豊富で実装が簡単です!