2019.12.05
【Rails】投稿したデータの削除機能実装手順
ActiveStorageで投稿機能を実装しているのですが、なかなか削除機能をできず解決に時間がかかってしまったので、備忘録としてまとめておきたいと思います。
Viewで画面上に削除リンクを実装
<%= link_to '削除', image, method: :delete %>
第一引数はリンクの名称、第二引数はリンク先のパスを指定します。第三引数のmethod: :deleteはHTTPリクエストがDELETEの場合、追記します。$ rake routesでHTTPリクエストを確認できます。
第二引数はHTTPリクエストがDELETEになる場合は、images/:idに対応するデータを指定しなければ僕の場合エラーになりました。images/:idをそのまま第二引数に指定すると下記エラーが発生しました。理由は調査中。
method: :deleteの部分は:method => :deleteでも意味は同じです。
ControllerにDestroyアクションを追加
def destroy
@image = Image.find(params[:id]).destroy #Imageから対象のIDを探して削除する
redirect_to root_url #インデックスページにリダイレクト
end
2行目の意味はfindメソッドとdestroyメソッドを繋げて一行にまとめています。findメソッドとdestroyメソッドは2行に分けてもどっちでも意味は同じなのでわかりやすいほうでOKです。
routes.rbでDestroyアクションを指定
delete '/images/:id' => "images#destroy"
:idは削除ボタンを押下したidがURLに入ります。
imagesコントローラのdestroyアクションを呼び出します。
一応解決は出来たが・・・
一応削除機能は実装できたのですが、腑に落ちない点が一つあります。
僕の場合、link_toの第二引数の指定が間違っていたようで、うまくいきませんでした。内容は第二引数に"images/#{:id}"と指定していて対応するidがない的なことを言われ、怒られました。このやり方で最初はいくと思ったんですが、うまくいかず。。どこがおかしいのかいまいち調べても分かりませんでした。DELETE(データの削除)の場合はこの指定だとダメなのかな?
link_toに関する疑問点は分かり次第追記します。わかるよって方がいましたら是非教えてください!
一応その時出たエラー画面をもう一度出しておきます↓