LoginSignup
3
5

More than 3 years have passed since last update.

退会時に投稿データを削除する [Rails]

Last updated at Posted at 2019-09-15

初めに

ポートフォリオを作成中、退会ユーザのデータの処理に困った結果、退会時に投稿データを削除することにしました。
※今回は論理削除を導入している為、論理削除が度々出てくると思いますが論理削除を導入していない場合でも、大丈夫です。

開発環境

・ruby-2.5.5
・Rails 5.2.3

gem
・devise
・paranoia(論理削除用)

前提条件

・deviseを使用したユーザ登録する。
・ユーザが退会すると削除フラグを設置し、論理削除扱いにする。
論理削除をついてはこちらをご覧ください。

現状

LINEの様なポートフォリオを作成中です。
ユーザが退会するとユーザ情報を論理削除されます。
しかし、退会ユーザの投稿はDB内に存在しているので、ある条件下(退会ユーザがコメントしたチャットルームに入る)ではエラーが発生します。

改善策

退会時に、ユーザの投稿を削除することにしました。

改善

コントローラー

コントローラーに退会機能を記述します。
初心者でも見たことある記述だと思います。

users_controller.rb
  def destroy
    user = User.find(params[:id]) #ユーザ毎の情報を得る
    user.destroy #ユーザ情報を削除(退会)
    redirect_to home_path #削除後、homeに移動させる
  end

モデル

userモデルとmessageモデルは1対多になっています。

message.rb

optional: trueは外部キーにnilを許可するものです。
ruby:message.rb
belongs_to :user, optional: true

user.rb

ここが重要です。
dependent => :destroyを記述することで、退会時にユーザID情報(user_idを持つもの)を持つデータを削除します。

user.rb
has_many :messages, :dependent => :destroy#退会時コメントも削除

最後に

たったこれだけで、退会時にデータを同時に削除できます。
もしよかったら参考にしてみてください。

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5