はじめに
deviseを使用して退会機能(論理削除)の実装について
アウトプットします!
論理削除とは?
データベースのレコードを非表示にして削除されてないけど
削除されているのと同じ扱いにすること。
メリット
- レコードが残っているのでデータの復旧が可能
- 削除されたレコードの履歴を残せるのでデータの検索が出来る
デメリット
- データ量増大によりストレージが圧迫される
物理削除とは?
データベースのテーブルから対象のレコードを物理的に削除すること
メリット
- レコードが削除されるのでストレージが圧迫されにくい
- 管理がしやすい
デメリット
- データの復旧が容易ではない
- 削除さえたデータの参照ができない
カラムの追加
ターミナル
$ rails g migration AddIsValidToUsers is_deleted:boolean
このカラムにデフォルト値(false)を設定する。
schema.rb
t.boolean "is_deleted", default: false
booleanを使用することにより、ture、falseで退会しているかどうかを判断します。
初期値をfalseに設定しますので、退会済みの場合はtrueとなります。
ルーティング
routes.rb
get "/out" => "parents#out"
patch "/withdraw" => "parents#withdraw"
controllerの編集
XXX_controller.rb
def withdraw
@user = current_user
@user.update(is_deleted: true)
reset_session
redirect_to root_path
end
viewの編集
app/views/parents/out.html.erb
<div>
<h2>本当に退会しますか?</h2>
<div>
<p>退会する場合は、『退会する』をクリックしてください。</p>
</div>
<div>
<%= link_to '退会しない', mypage_path(@user) %>
<%= link_to "退会する", withdraw_user_path(@user), method: :patch %>
</div>
</div>
まとめ
今回は論理削除にて退会機能を実装しましたが、サービスによって
実装方法の検討をする必要性を感じました!