SuzuBlog

webのお勉強はじめたばかりの初心者。備忘録

Rails基礎 削除機能の実装(destroy)

削除機能(destroy)の実装

getpostはリンクを作るときに特に指定しなくてもRailsがいい感じに解釈してくれていたが、DELETEの場合は明示的に指定してあげる必要がある。

Postモデルがあったとして、その削除機能のリンクを作るときは以下のようになる

<%= link_to '[削除]', post_path(post), method: :delete %>

pathはrails routesでルーティングをチェック。post_pathで良さそう。

f:id:hpsuzucat:20201028145305p:plain

そして、明示的に「deleteアクションを呼んでね」と指定する場合に method: :deleteとしてあげればOKのようです。

ちなみに、なんのワンクッションもなく削除されてしまうと困る場合も多いと思うので、 確認ダイアログを出したい場合は以下のように。

<%= link_to '[削除]', post_path(post), method: :delete, class: 'command', data: {confirm: '削除してよろしいですか?'} %>

そして、コントローラーにアクションを記述していく。

    def destroy
        @post = Post.find(params[:id])
        @post.destroy
        redirect_to posts_path
    end

どのPostに対するものなのかをまず特定し、@postに格納、それに対してdestroyを実行。 posts_path(記事の一覧が設定してあります)にリダイレクトする。

これで、基本の削除機能の実装ができるようになる。

ちなみに、whereで条件を指定して複数削除するdestroy_allというものもあるようなので、覚えておきたい。