#概要
本記事は、初学者がRailsを使ってToDoリストを作成する過程を記したものです。
私と同じく初学者の方で、Railsのアウトプット段階でつまづいている方に向けて基礎の基礎を押さえた解説をしております。
抜け漏れや説明不足など多々あるとは思いますが、読んでくださった方にとって少しでも役に立つ記事であれば幸いです。
#環境
-
Homebrew: 2.5.10
-> MacOSのパッケージ管理ツール -
ruby: 2.6.5p114
-> Ruby -
Rails: 6.0.3.4
-> Rails -
node: 14.3.0
-> Node.js -
yarn: 1.22.10
-> JSのパッケージ管理ツール -
Bundler: 2.1.4
-> gemのバージョン管理ツール
$ brew -v => Homebrew 2.5.10
$ ruby -v => ruby 2.6.5p114
$ rails -v => Rails 6.0.3.4
$ npm version => node: '14.3.0'
$ yarn -v => 1.22.10
$ Bundler -v => Bundler version 2.1.4
#第7章 CRUDのDelete(destroy)
第7章では、以下の機能を実装していきます。
- 削除機能(destroyアクション)
では、詳しく見ていきましょう。
##destroyアクション
今回は、destroyアクションを使って削除機能を実装していきます。
一覧表示画面から削除ボタンを押したら、本当に削除していいのかの確認が表示され、OKを押すと投稿が削除され、一覧表示画面に遷移するようにしていきたいと思います。
###1 コントローラ
コントローラには以下のように記述します。
def destroy
board = Board.find(params[:id])
board.destroy!
redirect_to root_path, notice: 'Delete successful'
end
まず、削除する対象のboardを取得します。引数にparams[:id]
を指定することで、パラメータ経由で対象のboardのidを探し、オブジェクトを取得します。
その上で、ActiveRecordのdestroyメソッドを使って、対象のレコードをデータベースから削除し、削除した旨を伝えるFlashメッセージとともに一覧表示画面に遷移させます。
ポイントは2つあります。
- 今回はビューに渡さないため、インスタンス変数には代入していません。
- destroyメソッドに
!
を付けているのは削除されなかった場合に例外を発生させるためです。例外が発生したらそこで処理が止まりますが、destroyアクションでは確実にデータを削除して欲しいので、意図的に例外が発生する状況を作っています。
###2 ビュー
次に、一覧表示画面に削除するためのリンクを貼って、削除ボタンを押したら、本当に削除していいのかの確認が表示され、OKを押すと投稿が削除され流ようにしていきたいと思います。
= link_to 'Delete', board_path(board), data: { method: 'delete', confirm: '本当に削除してもいいですか?' }
ここでのポイントは第3引数にdataを指定していることです。
記述 | 意味 |
---|---|
method: 'delete' | board_pathはデフォルトでGETリクエストが指定されているため、DELETEリクエストにする場合はこのように指定してあげる必要があります |
confirm: '本当に削除してもいいですか?' | confirmでは確認表示を実装することができます。valueに指定した値が画面上に表示されます。 |
以上で、削除機能の実装は完了です。