IT技術にまつわる実験ノート

「長編を書くより、短編を数多く完成させてください。それが上達への近道です」 by 手塚治虫

discard を使ってみる

はじめに

ここでは論理削除用の gem である discard を使ってみることにする。

 

説明

f:id:matt-note:20190430201644p:plain

 

使ってみる

ざっくりとアプリを作成する。

  • rails new discard_sample
  • cd discard_sample

 

discard をインストールする。

  • echo 'gem "discard"' >> Gemfile
  • bundle

 

 サンプル用に Post モデルを作成する。

  • bin/rails g model Post title:string content:text

 

posts テーブルに discarded_at カラムを追加する。

  • bin/rails generate migration add_discarded_at_to_posts discarded_at:datetime:index

 

マイグレーションを実行して、DB に設定を反映させる。

 

app/models/post.rb で Discard モジュールをインクルードする。

これで Post クラスで discard で定義されたメソッドを使えるようになる。

f:id:matt-note:20190430133735p:plain

 

コンソールを起動して、Post データを投入しておく。

  • bin/rails c
  • Post.create(title: "post_1", content: "content_1")

 

discard で追加されたメソッドを使ってみる

discard メソッドで、レコードを論理削除できる。

  • Post.find(1).discard

f:id:matt-note:20190430134502p:plain

-> 論理削除できた。論理削除をする時は、destroy ではなく、discard メソッドを使う。

 

discarded? メソッドで論理削除されたか確認できる。

  • Post.find(1).discarded?

f:id:matt-note:20190430135514p:plain

 

kept メソッドで、論理削除されていないレコードの集合を取り出すことができる。一方で、all メソッドは論理削除されたものもすべて取り出すメソッドになる。

  • Post.kept
  • Post.all

f:id:matt-note:20190430140611p:plain

f:id:matt-note:20190430140619p:plain

 

論理削除されたレコードの集合は discarded メソッドで取り出すことができる。

  • Post.discarded

f:id:matt-note:20190430135922p:plain

 

論理削除から復旧してみる。

  • Post.find(1).undiscard

f:id:matt-note:20190430140825p:plain

-> 論理削除から復旧できた。discard_at は nil に設定される。

 

論理削除されていないことを確認してみる。

f:id:matt-note:20190430140220p:plain

-> 論理削除から復旧できたことを確認できた。