HTTPメソッドのGET以外はメソッド名の指定が必要です。
CRUD処理のDにあたるDelete、削除を行います。
記事一覧画面から、削除できるようにリンクをはりましょう。
リンクのコードは何度も出てきた、link_toを使います。
削除するを押したときに遷移する画面のパスを$ rake routesで調べてみましょう。
Controller#Actionから削除に該当するものを探します。
articles#destroyというアクションをが削除に該当しそうだということがわかります。
しかし、パスを調べようとしてもarticle GET/PATCH/PUT/DELETEと同じarticleに4種類の別の単語が続いています。
これはいったいどういうことでしょうか。
データの送信はHTTPメソッドと呼ばれる4つのメソッドが使われています。
HTTPメソッドとはHTML(Webページ)を閲覧するときのルールで、サーバーとやりとりができる仲介人のような存在です。
これまで何度もでてきた$ rake routesの左側の列はよく見ると、GETだけではなくてPOSTやPATCH、DELETEの表示もあります。
HTTPメソッドはGET POST PATCH DELETEの4種類の言葉を使って、サーバーとやり取りを行います。
私たちが普段閲覧しているWebページはどのように表示されているのでしょうか。
架空のhttp://kawaiikoinu.ne.jpというサイトを例に解説します。
私たちが「http://kawaiikoinu.ne.jpのサイトを見たいな」と思い、URLへアクセスしたとき、裏では「http://kawaiikoinu.ne.jpのサイトを表示する情報をください」とHTTPメソッドを使ってサーバーに要求をしています。
ではこのサーバーとはいったい何者なのでしょうか。
サーバーとは皆さんが使用しているようなWindowsやMacと同じパソコンです。
とても大きなパソコンだと考えてください。
ユーザーが閲覧したいなと思ってURLにアクセスするとサーバーと会話ができるHTTPメソッドが間に入ってやりとりをしてくれます。
「http://kawaiikoinu.ne.jpのサイトを表示してください」とサーバーへ要求するとサーバーはhttp://kawaiikoinu.ne.jpサイトの情報を1つずつ返してくれます。
$ rake routesを見てもわかる通りHTTPメソッドは4つの中でGETを使う頻度が最も高いです。
index.html.erbを表示してください、new.html.erbを表示してください…というようにブラウザに何かを表示してもらう(サーバーに情報を送ってもらう)、送ってもらった情報をユーザーがGETする機会が最も多いからです。
その為HTTPメソッドではGETがデフォルトとして設定されており、GETの場合はパスにHTTPメソッドを指定しなくても良いことになっています。
article#indexのPrefixがarticles GETなのに、articles_pathとGETを省略できていたのはこの為です。
しかし、デフォルトがGETの設定になっているので指定をしなければユーザーからの要求は全てGET(表示してね)になってしまいます。
その為、POST PATCH DELTEメソッドの場合はコードに method: :post などのような形でメソッドを追記しなければならないというルールになっています。
今回はarticle#destroyに該当するDELETEメソッドです。
その為、method: :delete %>とパスの後ろにdeleteメソッドであることを追加します。
※article_path(article)とパスの後ろに引数がついています。よくわからない方はコチラを再度確認してください。
ではindex.html.erbファイルにリンクのコードを追加して保存、ブラウザを更新してみましょう。
削除のリンクの作成に成功しました!
リンクは作成しましたが、articles#destroyに該当するアクションを作成していません。
このままではエラーになってしまうので、articleコントローラにdestroyアクションを追加しましょう。
articlesコントローラに以下のコードを追加してください。
def destroy
@article = Article.find(params[:id])
@article.destroy
redirect_to articles_path
end
これで記事の削除ができるようになりました。
しかし、うっかり削除のリンクをクリックして削除してしまうことがないように削除する前に確認のメッセージが出るようにします。
このメッセージを表示する為にはmethod: :delete %>のリンクに以下のコードを追加します。
method: :delete, data: {confirm: "本当に削除しますか?"} %>
コードを保存してブラウザを更新してください。
削除のリンクをクリックすると確認のメッセージが表示されるようになりました。
無料ビデオ講座のお知らせ
Skillhub [スキルハブ]では無料の動画講座を多数公開しています。他校だと数万円するような講座が無料で受講できます。