ジーニアスブログ – WEB制作会社ジーニアスウェブのお役立ちブログ

Railsで論理削除を扱うならparanoiaを使用しよう!


みなさんこんにちは、ジーニアスウェブの中武です。

梅雨が明けてもなかなかスッキリ晴れませんね。。。
地域により気温が体温越えのところもありますので、熱中症などに十分注意して過ごしましょう。

さて、今回は削除しても残しておける論理削除を実装するGemをご紹介します。

論理削除をしようとすると削除用のカラムを用意して、削除した時は削除日時をセットする処理を追加して、
削除分も表示する場合はそれ用のsqlを記述して… と、1つ1つの処理が結構ややこしかったりします。

ただ、RailsではparanoiaというGemを使用すると簡単に扱うことができます。
早速設定の方法からそれぞれの内容をみていきましょう!

1.Gemのインストール

Gemfileに以下を追加します。

   gem 'paranoia'
  

※bundle installをお忘れなく!

2.論理削除を指定するモデルに削除用のカラムの追加と、定義を追加します

ーカラム追加

    class 〇〇 < ActiveRecord::Migration
       def change
         add_column :モデル名, :deleted_at, :datetime
         add_index :モデル名, :deleted_at
       end
     end
   

※削除カラムを追加する際は、カラム名に「deleted_at」を使用するようにしてください。
※migration作成後は、db:migrateをお忘れなく!

ーモデルに定義追加

    acts_as_paranoid
  

以上で設定完了です。
どうですか?2ステップなのでかなり簡単ですよね!

3.削除分も表示する

削除した分も表示したい場合があると思いますので、削除分も表示させる場合はこちらを使用すれば可能です。

    モデル.with_deleted
  

まとめ

いかがでしたでしょうか?
論理削除試してみたいけど手作業でデータの更新は大変だなぁと感じていた方は、ぜひこちらのGemを使用してみてください。