0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Rails】ユーザー退会機能(物理削除)

Posted at

論理削除とは

論理削除のメリット
・データを完全に削除せず、復元や再利用が容易
・削除されたデータの履歴や関連情報を保持しやすくなる
・データを誤って削除した場合でも、バックアップや復元を介して元に戻すことができる

論理削除のデメリット
・データベース内に論理削除されたデータが残るため、データベースの容量が増える可能性がある
・削除されたデータに対するクエリや検索処理に追加の条件を設定する必要がある
・データの一貫性を保つために、論理削除されたデータに対してもアクセス制御やバリデーションを適用する必要がある

物理削除とは

物理削除のメリット
・データベースからデータが完全に削除されるため、データベースの容量を節約できる
・削除されたデータを誤って復元する心配がないため、データのセキュリティを向上させることができる

物理削除のデメリット
・削除したデータの履歴や関連情報が完全に失われるため、復元や再利用が難しい
・誤って削除した場合はバックアップや復元の手段を用意する必要がある

コントローラ編集

users_controller.rbにdestroyアクション追加。

class UsersController < ApplicationController
  before_action :set_user, :only => [:show, :destroy]

  def destroy
    @user = User.find(params[:id]) 
    @user.destroy
    flash[:notice] = 'ユーザーを削除しました。'
    redirect_to root_path
  end

  private
  def set_user
    @user = User.find_by(:id => params[:id])
  end
end

モデル編集

user.rbにdependent => :destroyを追加することで、退会したユーザに紐づく投稿も削除される。

has_many :posts, :dependent => :destroy
# 投稿したデータも削除する

has_many :comments, :dependent => :destroy
# 退会ユーザーに紐づくコメントも削除する場合

ルーティング編集

routes.rbにdestroyアクション追加。

resources :users, only: [:show, :destroy]

ビュー編集

退会ボタン作成。

<%= link_to "退会",user_path(current_user.id), class: "destroy-user", method: :delete, "data-confirm" => "本当に退会しますか?" %>
0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?