【Rails】ユーザーを削除したら関連している投稿も一緒に削除する

ユーザーを削除(退会)したい時に関連付けしているタスクが残っているまま削除しようとすると、
PG::ForeignKeyViolation: ERROR
というエラーが起きる。
そこで最初はタスクが空ならそのままユーザーを削除、そうでないならタスクとユーザーを一緒に削除するようにしていたが、
controllers/users_controller.rb
  def destroy
    if @task.nil?
      @user.destroy
      redirect_to admin_users_path, notice: t("flash.delete_user")
    else
      @task.destroy
      @user.destroy
      redirect_to admin_users_path, notice: t("flash.delete_user")
    end
  end

↑これだと冗長な記述なので

models/user.rb
  has_many :tasks, dependent: :destroy
controllers/users_controller.rb
  def destroy
    @user.destroy
    redirect_to admin_users_path, notice: t("flash.delete_user")
  end
dependent: :destroy
dependentというActiveRecordのオプションで関連しているタスク(has_many :tasks)を簡単に削除出来る。

参考にしたサイト

【Rails】ActiveRecordの:dependent使い分けまとめ【: destroy, :delete, :nullify】|ITエンジニアのノマド生活
ContentsActiveRecordのdependentオプションとはdependent: destroy使うタイミングdependent: delete / delete_all使うタイミングdependent:
タイトルとURLをコピーしました