JavaからのRuby on Rails入門

リソースの削除機能を実装する

calendar

 さて、引き続き電話帳アプリを作っていきます。前々回までで一覧画面、新規作成画面、編集画面ができました。

 今回は、リソースの削除機能を実装します。

削除処理のルーティングを確認する

 まずルーティングを確認してみましょう。

 9行目がmemberリソースの削除用に用意されたリクエストです。

 見ての通り、
メソッドはDELETE
urlは/members/:id
となっています。

 つまり、ID1番のmemberリソースを削除したい場合は、/members/1へとdeleteメソッドによるhttpリクエストを送ればいいというわけです。
※もちろん削除処理自体は自分で書く必要があります。

削除リクエストを送るリンクを作る

 まず削除リクエストを送るためのリンクを作ります。ボタンにしてもいいのですが、ここでは普通のリンクにします。

 削除は一覧画面ではなく、各編集画面からできるようにしたいと思います。

 views/members/edit.html.erbを開いて、5行目を挿入して下さい。

 link_toメソッドを使ってaタグを出力しています。結果的に、以下のaタグが出力されることになります。

 おさいになりますが、link_toメソッドの第一引数にアンカーテキストを、第二引数にリンク先urlを渡すことで、aタグを出力しています。

  出力↓↓

 上記の削除リンクについては引数が1つ増えています。第三引数以降はオプションで、キーを指定した上でその値を渡します。
※指定できるオプションは他にもあります。詳しくは→link_to – リファレンス – – Railsドキュメント

  出力↓↓

 この場合、aタグにdata-method="delete"という属性が追加されているのが分かると思います。
rel="nofollow"も自動的に追記されています。

 これで各編集画面に、削除リクエストを送るボタン(というかリンク)が出来ました。

destroyアクションを追加して削除処理を実装する

 この削除リクエストに反応するのが、destroyアクションです。ルーティングを確認してください。

 membersコントローラーにdestroyアクションを追加して、リソースをDBから削除する処理を実装しましょう。

 /app/controllers/members_controller.rbを開いて下さい。

 destroyアクションを追加します。

 その中で、リクエストパラメータに含まれるIDから該当のMemberオブジェクト(モデル)を作って、destroyメソッドで削除してしまいます。

注)このdestroyメソッドはモデルクラスが持つインスタンスメソッドであって、destroyアクションとは全然別物なので混同しないように。

 たったこれだけの表記で、テーブルから該当の一行(一人のデータ)を削除してしまえるんです。Railsって楽ちんです。

 削除するだけでは、その後表示する画面がなくてエラーになるので、一覧画面へとリダイレクトを行ってdestroyアクション終了です。

確認ダイアログを出す

 これで削除するのリンクをクリックすれば、そのmemberリソースを削除することができるようになりました。

 が、削除する場合、確認ダイアログを出してあげた方が親切です。

なので、削除するリンクをクリックした際に、まずこの確認ダイアログが表示し、OKをクリックして初めて削除処理が走るようにしましょう。

 views/members/edit.html.erbを開いて下さい。

 いちいちJavascriptを書くのは面倒ですが、Railsならめちゃ簡単です。なんとlink_toメソッドにもう一つオプションを追加するだけで出来ます。

 これだけです。

 第四引数に
data: {confirm: “本当に削除しますか?”}
を渡すだけで、確認ダイアログ用のJavascriptを出力してくれます。

 これで削除処理も完成です。

この記事をシェアする

コメント

コメントはありません。

down コメントを残す




関連記事

書いている人

Nobuo

Nobuo

一番かんたんなJava入門というサイトを運営しています。Javaやphpは少し分かりますが、Ruby on Railsについては全く何も知らないので、このサイトにアウトプットしながら覚えていこうかと思っています。 [詳細]

folder Rubyの基本文法

more...

folder 初めてのRuby on Rails入門

more...

folder Rails忘備録

more...