ihatov08 blog

プログラミング初心者だけどRailsとSwiftマスターします

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])