search
LoginSignup
0

More than 1 year has passed since last update.

posted at

Railsアプリで削除機能を実装する

削除機能の概要

一覧画面の任意の投稿の「削除」ボタンをクリックすれば、確認ダイアログが出て、OKを押すとその投稿が削除され、一覧画面に遷移するようにします。また、詳細画面にもボタンを配置します。

削除機能ボタンの追加

一覧画面に削除ボタン(リンク)を追加します。

app/views/posts/index.html.slim
  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'

103AC6EB-FA1C-489E-ACE6-E67AF67ED343_1_105_c.jpeg

削除アクションへのリンクはmethod: :deleteという指定により、DELETEメソッドでリクエストされます。指定し忘れると、詳細リンクと同様に、詳細画面へ遷移してしまいます。

link_toのdataオプションに"confirm:メッセージ"を渡すと、リンクをクリックした際に確認ダイアログを出し、OKが押された時のみリンク先のURLへのリクエストを行ってくれるようになります。

続いて、詳細画面にも削除ボタンを追加します。

app/views/posts/show.html.slim
    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'

A0A352A5-771A-4AF7-B5FD-761E9532F502_1_105_c.jpeg

削除アクションの実装

app/controllers/posts_controller.rbにdestroyアクションを追加します。

app/controllers/posts_controller.rb
  def destroy
    post = Post.find(params[:id])
    post.destroy
    redirect_to posts_url, notice: "投稿を削除しました。"
  end

destroyアクションでは、パラメータ経由で対象投稿のIDを受け取り、PostオブジェクトをDBから取得します。その上で、destroyメソッドによって対応する投稿レコードをDBから削除し、削除した旨を伝えるFlashメッセージとともに一覧画面へ遷移させます。

では動作確認をしてみます。一覧の削除ボタンを押して、確認ダイアログのOKボタンを押すと…
1D2E4E80-2F05-47EB-B891-01A3CE48C4FF.png
3FAB3E34-29A0-480A-B86D-8298FFB8C95C.png

無事、削除できました!

CRUD機能を持ったアプリの完成

以上で、基本的なCRUD機能を持つ投稿アプリを作成することができました。
次回からは、もっと使いやすいよう細部を改良していきます。

参考

現場で使える Ruby on Rails 5速習実践ガイド

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0