LoginSignup
0
0

discardで論理削除する

Posted at

はじめに

先日、業務でdiscardを使用して論理削除の実装をしました。
discardは初めて使用したのですが、とても簡単に論理削除の実装ができたため、備忘録として記事にしたいと思います。

私自身、まだまだ未熟な経験の浅いエンジニアですので、誤った解釈をしている可能性もあります。もしそういった場合がありましたら、ぜひコメントでご指摘いただければ幸いです。

論理削除とは

論理削除は、データベースのレコードを物理的には削除せずに、削除されたかのように扱う方法です。
レコードに「削除された」という状態を示すマークやフラグを設定することによって、レコードはデータベースに残り続けますが、アプリケーションの動作上では「存在しない」または「アクセス不可能」な状態にできます。

discard とは

discard は、Ruby on Rails で論理削除を簡単に実装するための Gem です。
discard では、論理削除に関連するカスタムロジックを書く必要がなくなり、一貫した方法でデータを扱うことができます。

環境設定

Gem のインストール

Gemfile に discard を追加するために、以下の行を追記します。

Gemfile
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 モデルの場合は以下のようになります。

app/models/user.rb
class User < ApplicationRecord
  include Discard::Model
end

使い方

レコードの論理削除

モデルのインスタンスに対して discard メソッドを呼び出して、レコードを論理削除します。

@user.discard

論理削除されたレコードの取得

論理削除されたレコードを取得する場合は、discarded スコープを使用します。

User.discarded

レコードの復元

論理削除されたレコードを復元する場合は、undiscard メソッドを使用します。

@user.undiscard

参考

0
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
0
0