railsで削除フラグを使いレコードを残しておく方法
destroyメソッドはSQLのDELETE文を実行して、テーブルからレコードを完全に消してしまう。 通常はこれでよいが、レコードを残したまま削除「状態」にしておきたいケースもある。 例 ・レコードの記録を残しておきたい時 ・退会させたユーザーを復活させたい時 そうしたときには、deteledという名前の論理値型のカラム(削除フラグ)をテーブルに追加して、値がtrueなら削除状態とみなすことにする。
t.boolean :deleted, null: false, default: false
モデルでは、destroyメソッドを上書きして、削除する代わりにdeletedカラムをtrueに変える。
def destroy self.deleted = true save end
またモデルでは削除されていないユーザーを表すスコープを作成する。
scope :active, where(deleted: false)
controllerでは、レコードを取り出す時にactiveスコープを付ける。
@hoges = Hoge.active.order("number") @hoge = Hoge.active.find(params[:id])