はじめに
先日、業務でdiscardを使用して論理削除の実装をしました。
discardは初めて使用したのですが、とても簡単に論理削除の実装ができたため、備忘録として記事にしたいと思います。
私自身、まだまだ未熟な経験の浅いエンジニアですので、誤った解釈をしている可能性もあります。もしそういった場合がありましたら、ぜひコメントでご指摘いただければ幸いです。
論理削除とは
論理削除は、データベースのレコードを物理的には削除せずに、削除されたかのように扱う方法です。
レコードに「削除された」という状態を示すマークやフラグを設定することによって、レコードはデータベースに残り続けますが、アプリケーションの動作上では「存在しない」または「アクセス不可能」な状態にできます。
discard とは
discard は、Ruby on Rails で論理削除を簡単に実装するための Gem です。
discard では、論理削除に関連するカスタムロジックを書く必要がなくなり、一貫した方法でデータを扱うことができます。
環境設定
Gem のインストール
Gemfile に discard を追加するために、以下の行を追記します。
gem 'discard'
その後、以下のコマンドを実行して、Gem をインストールします。
bundle install
マイグレーションファイルの設定
discard gem を利用するためには、まずマイグレーションファイルを設定する必要があります。これにより、データベースに論理削除のためのフィールドを追加します。
マイグレーションファイルの生成
rails generate migration AddDiscardedAtToUsers discarded_at:datetime:index
この例では、users
テーブルに discarded_at
カラムを追加しています。テーブル名は適宜変更してください。
データベースのマイグレーション
マイグレーションを適用してデータベースを更新します。
rails db:migrate
モデルの設定
discard gem を使用するためには、モデルにいくつかの設定を加える必要があります。
モデルの更新
論理削除を行いたいモデルに discard メソッドを追加します。例えば、User
モデルの場合は以下のようになります。
class User < ApplicationRecord
include Discard::Model
end
使い方
レコードの論理削除
モデルのインスタンスに対して discard
メソッドを呼び出して、レコードを論理削除します。
@user.discard
論理削除されたレコードの取得
論理削除されたレコードを取得する場合は、discarded
スコープを使用します。
User.discarded
レコードの復元
論理削除されたレコードを復元する場合は、undiscard
メソッドを使用します。
@user.undiscard
参考