1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Rails】初心者エンジニアが削除ボタンが動かない話!!原因はJavaScriptの・・

Posted at

こんにちは、miyoshiです。
モニター開発も順調に進んでおります。
今回は、ISSUE3 のところで、実装できた部分をご紹介します。
合わせて、失敗と改善策も含めて、ご紹介します。

この記事も、前回公開した記事の続編です。

今回実装したこと(ISSUE#3)

管理者用時間枠の管理機能追加

  • 時間枠モデル(例:TimeSlot)を作成
  • 時間枠管理用のCRUD画面を作成(管理者専用)
  • バリデーションや重複チェックを実装
  • 管理者以外はアクセス不可に設定

僕の体験談:削除ボタンを実装したのに動かない?!

管理画面で時間枠を管理する機能を作っていた時、「削除」を押しても削除されず、代わりに、、、

「The action 'show' could not be found」
エラーが、、、😱

最初はコントローラーやルーティングに問題があると思い、何度もコードを見直しました。

なぜリンクで削除リクエストが送れないの?

実はHTMLの<a>タグはGETリクエストしか送れません。
だから、普通にlink_toで削除用リンクを作っても、ブラウザはGETを送ってしまい、Railsはshowアクションを呼び出そうとしてしまうんです。

ここに僕はハマりました…
「なんで削除なのにshowアクションが呼ばれるんだ!?」と一瞬パニックに。😅

RailsはJavaScriptで書き換えている

RailsではJavaScriptを使い、リンククリック時にリクエストのHTTPメソッドをDELETEに変えてくれます。
でもこのJavaScriptが正しく読み込まれていないと、ただのGETリンクになってしまいます。

僕の解決策

app/views/layouts/application.html.erbでJavaScript読み込みタグの修正

<%= javascript_importmap_tags %>

削除リンクの正しい書き方(僕の最終コード)

<%= link_to "削除", admin_slot_path(slot), data: { turbo_method: :delete }

data: { turbo_method: :delete }をつけることで、JavaScriptがDELETEリクエストに変換してくれます。

まとめ:削除ボタンが動かないときのチェックリスト

  • HTMLのリンクはGETしか送れないことを知る

  • RailsのJavaScript(importmap)が正しく読み込まれているか確認

  • application.html.erbに <%= javascript_importmap_tags %> があるか見る

  • link_toのdata-{turbo-method: :delete}が正しく書かれているか確認

最後に

実際の開発では「原因はここ?」と思ったところが違ったり、ハマることが多いですよね。
僕も今回のことでRailsの仕組みを少し理解できた気がします。

同じように困っている初心者の方の助けになれば幸いです。
質問や感想もぜひコメントくださいね!😊

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?