論理削除とは
論理削除のメリット
・データを完全に削除せず、復元や再利用が容易
・削除されたデータの履歴や関連情報を保持しやすくなる
・データを誤って削除した場合でも、バックアップや復元を介して元に戻すことができる
論理削除のデメリット
・データベース内に論理削除されたデータが残るため、データベースの容量が増える可能性がある
・削除されたデータに対するクエリや検索処理に追加の条件を設定する必要がある
・データの一貫性を保つために、論理削除されたデータに対してもアクセス制御やバリデーションを適用する必要がある
物理削除とは
物理削除のメリット
・データベースからデータが完全に削除されるため、データベースの容量を節約できる
・削除されたデータを誤って復元する心配がないため、データのセキュリティを向上させることができる
物理削除のデメリット
・削除したデータの履歴や関連情報が完全に失われるため、復元や再利用が難しい
・誤って削除した場合はバックアップや復元の手段を用意する必要がある
コントローラ編集
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" => "本当に退会しますか?" %>