現在投稿系のアプリを作っていて退会したユーザーの扱いどうしようかなーと考えていたら、teratailなどのサービスで「退会済みユーザー」のような表記になっているのを見受けました
直感的に見てもわかりやすいし実装もしやすそうだなと思ったのでこれで行こうと思います。
実装
まず退会機能なんですが、完全にデータを削除といったことはせずに退会したことにするといった
__論理削除__といった状態にするといいといろんな記事に書いてありました。
論理削除の概要については下記記事がわかりやすかったので参考させていただきました
情報提供を依頼されたりするときにすぐに出せるようにするみたいなこともあるみたいですね。
誹謗中傷とか犯罪予告とか
まあ僕の場合は投稿系なので100件投稿してくださったユーザーが退会した時にそれを全部削除するってなったら中身がスカスカになりそうだと思ったんで退会した場合はユーザーネームを
__退会済みユーザー__みたいな表記に変えてコメントや投稿を残すことにしました
まずは退会の扱いですが、users,テーブルに__is_deleted__とか__deleted_flag__みたいなカラムを持たせてboolean型で追加します
class AddIsDeletedToUsers < ActiveRecord::Migration[5.2]
def change
add_column :users, :is_deleted, :boolean, default: false, null: false
end
end
add_column (追加したいテーブル), (カラム名), (データ型), null:falseなどの制約
デフォルトをfalseにすることで退会処理が実行された時にtrueになり、このユーザーは退会したユーザーとして扱えます。
例) <% if @user.is_deleted == false %> *is_deletedがfalseなので退会していないことになる
<%= @user.username %>
<% else %> *elseでis_deleted == trueの場合、つまり退会した場合の表示にする*
退会済みユーザー
<% end %>
もっと適切な使い方があるのだと思いますが、僕はこれが精一杯でした。。
こんな感じで投稿やコメントは残したまま退会ユーザーとして扱えます。
結構穴がある実装だと思います。
正直これ以外でつかえる場面が思いつかないのでこれでいいか不安ですがとりあえず現状は問題ないのでこのまま行きます。
退会したら30日間は同じメールアドレスで登録できないみたいな感じの動作が理想なのでしょうが、データが変わるのはis_deletedだけなので他のカラム(username,email,password)達は残っているので退会したら同じメールアドレスでログインすることが2度とできなくなるっぽいです
まあデータが残ったままですからね
自分でも調べますが、こんなん良いよみたいな案がありましたらコメントで教えていただけると幸いです。