block

プログラミング初心者のアウトプットブログです。

【rails】destroy_allメソッドで指定したすべてのデータを一括で削除する


指定した親データのコメントをすべて削除する


routes.rb

Rails.application.routes.draw do
  devise_for :users
  root "parents#index"
  resources :parent  do
    resources :comment do
     # collectionでdestroy_allアクションへのルーティングを設定
      collection do
        delete 'destroy_all'
      end
    end
  end
end


parentのedit.html.erbに 全てのコメントを削除する要素を追加する

<div><%= link_to "全てのコメントを削除", destroy_all_box_comments_path(@parent.id), method: :delete %></div>


comments_controller.rbでdestroy_allメソッドの処理を記述する

class ConnectsController < ApplicationController
  # destroy_allメソッド
  def destroy_all
    # paramsで送られてきた親のレコード取得
    parent = parent.find(params[:box_id])
   # 取得した親に紐付いているすべてのコメントをcommentsに入れる
    comments = box.comments
    # 一括削除に成功したときと失敗したときの分岐
    if comments.destroy_all
      redirect_to box_comments_path(parent)
    else
      render edit_parent_path(parent)
    end
  end
end