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

[Rails7] link_toでdeleteできない

Posted at

背景

登録データを削除する機能を追加するため、以下のlink_toを作成したが、deleteが機能せず削除できなかった。上手く検索できずにぐるぐるしたため、備忘録として残す。

/app/views/shops/edit.html.erb
<%= link_to('お店を削除', shop_path(@shop.id), method: :delete, data: { conform: "削除しますか?"} ) %>

状況

リンクをクリックすると削除されずに、詳細確認画面(shops#show)に戻ってきていた。

Started GET "/shops/3" for ::1 at 2024-10-13 22:19:26 +0900
Processing by ShopsController#show as HTML
  Parameters: {"id"=>"3"}
  Shop Load (0.2ms)  SELECT "shops".* FROM "shops" WHERE (3) LIMIT ?  [["LIMIT", 1]]
  ↳ app/controllers/shops_controller.rb:22:in `show'

原因

Rails7 以上では、rails-ujsが標準構成からはずれ、Turboが標準構成に追加されている。

rails-ujsとは何かについては、以下のサイトを参照。

Railsの一部のRESTfulな動作や非同期な処理などを実現するために、JavaScriptの送信に関する処理などが書かれたライブラリです。

rails-ujsは、link_toヘルパーのmethodconformをjavascriptで処理するように定められているらしく、rails-ujsによってGET以外のHTTPメソッドが指定できるらしい。

Rails7では、rails-ujsの機能を吸収したTurboが標準構成となった。これにより、methodなどの書き方が変更になっている。

解決方法

methodturbo_methodに、confirmturbo_confirmに変更する。

link_to delete メソッドの書き方
<%# rails-ujsの場合 %>
<%= link_to 'お店を削除', shop, method: :delete, data: { confirm: "削除しますか?" } %>

<%# Turboの場合 %>
<%= link_to 'お店を削除', cat, data: { turbo_method: :delete, turbo_confirm: "削除しますか?" } %>

参考にしたサイト

補足

上記「参考にしたサイト」に記載があるが、destroyアクションのリダイレクトにおいて、不具合が発生する可能性があることからリダイレクトにstatus: :see_otherを追加した。

destroyメソッド
redirect_to shops_path, status: :see_other
0
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
0
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?