#削除機能の概要
一覧画面の任意の投稿の「削除」ボタンをクリックすれば、確認ダイアログが出て、OKを押すとその投稿が削除され、一覧画面に遷移するようにします。また、詳細画面にもボタンを配置します。
##削除機能ボタンの追加
一覧画面に削除ボタン(リンク)を追加します。
tbody
- @posts.each do |post|
tr
td= link_to post.content, post
td= post.created_at
td
= link_to '編集', edit_post_path(post), class: 'btn btn-primary mr-3'
= link_to '削除', post, method: :delete, data: {confirm: "投稿を削除します。よろしいですか?"},
class: 'btn btn-danger'
削除アクションへのリンクはmethod: :deleteという指定により、DELETEメソッドでリクエストされます。指定し忘れると、詳細リンクと同様に、詳細画面へ遷移してしまいます。
link_toのdataオプションに"confirm:メッセージ"を渡すと、リンクをクリックした際に確認ダイアログを出し、OKが押された時のみリンク先のURLへのリクエストを行ってくれるようになります。
続いて、詳細画面にも削除ボタンを追加します。
tr
th= Post.human_attribute_name(:updated_at)
td= @post.updated_at
= link_to '編集', edit_post_path, class: 'btn btn-primary mr-3'
= link_to '削除', @post, method: :delete, data: {confirm: "投稿を削除します。よろしいですか?"},
class: 'btn btn-danger'
##削除アクションの実装
app/controllers/posts_controller.rbにdestroyアクションを追加します。
def destroy
post = Post.find(params[:id])
post.destroy
redirect_to posts_url, notice: "投稿を削除しました。"
end
destroyアクションでは、パラメータ経由で対象投稿のIDを受け取り、PostオブジェクトをDBから取得します。その上で、destroyメソッドによって対応する投稿レコードをDBから削除し、削除した旨を伝えるFlashメッセージとともに一覧画面へ遷移させます。
では動作確認をしてみます。一覧の削除ボタンを押して、確認ダイアログのOKボタンを押すと…
無事、削除できました!
#CRUD機能を持ったアプリの完成
以上で、基本的なCRUD機能を持つ投稿アプリを作成することができました。
次回からは、もっと使いやすいよう細部を改良していきます。