LoginSignup
0
1

More than 3 years have passed since last update.

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

Posted at

削除機能の概要

一覧画面の任意の投稿の「削除」ボタンをクリックすれば、確認ダイアログが出て、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速習実践ガイド

0
1
0

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
  3. You can use dark theme
What you can do with signing up
0
1