#初めに
ポートフォリオを作成中、退会ユーザのデータの処理に困った結果、退会時に投稿データを削除することにしました。
※今回は論理削除を導入している為、論理削除が度々出てくると思いますが論理削除を導入していない場合でも、大丈夫です。
#開発環境
・ruby-2.5.5
・Rails 5.2.3
gem
・devise
・paranoia(論理削除用)
#前提条件
・deviseを使用したユーザ登録する。
・ユーザが退会すると削除フラグを設置し、論理削除扱いにする。
論理削除をついてはこちらをご覧ください。
#現状
LINEの様なポートフォリオを作成中です。
ユーザが退会するとユーザ情報を論理削除されます。
しかし、退会ユーザの投稿はDB内に存在しているので、ある条件下(退会ユーザがコメントしたチャットルームに入る)ではエラーが発生します。
#改善策
退会時に、ユーザの投稿を削除することにしました。
#改善
##コントローラー
コントローラーに退会機能を記述します。
初心者でも見たことある記述だと思います。
def destroy
user = User.find(params[:id]) #ユーザ毎の情報を得る
user.destroy #ユーザ情報を削除(退会)
redirect_to home_path #削除後、homeに移動させる
end
##モデル
userモデルとmessageモデルは1対多
になっています。
###message.rb
optional: trueは外部キーにnilを許可するものです。
belongs_to :user, optional: true
###user.rb
ここが重要です。
dependent => :destroyを記述することで、退会時にユーザID情報(user_idを持つもの)を持つデータを削除します。
has_many :messages, :dependent => :destroy#退会時コメントも削除
#最後に
たったこれだけで、退会時にデータを同時に削除できます。
もしよかったら参考にしてみてください。