Rails基礎 削除機能の実装(destroy)
削除機能(destroy)の実装
get
やpost
はリンクを作るときに特に指定しなくてもRailsがいい感じに解釈してくれていたが、DELETE
の場合は明示的に指定してあげる必要がある。
Post
モデルがあったとして、その削除機能のリンクを作るときは以下のようになる
<%= link_to '[削除]', post_path(post), method: :delete %>
pathはrails routes
でルーティングをチェック。post_path
で良さそう。
そして、明示的に「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
というものもあるようなので、覚えておきたい。