「更新する」ボタンを押したら、ユーザーが削除される現象が起きてしまい、原因がわかったのでメモ。
状態
編集内容を入力後、「更新する」を押すとユーザーが削除された。
<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %>
・
・
<div class="actions mt-3 text-center">
<%= f.submit "更新する", class: "btn btn-primary" %>
<%= button_to "削除する", registration_path(resource_name), data: { confirm: "本当によろしいですか?" }, method: :delete, class: "btn btn-danger" %>
</div>
・
・
<% end %>
原因
以下のように「更新する」を押した際にDELETEリクエストが送信されていた。
対策1: フォームの外にbutton_toを設置
button_toではlink_toと違いフォームを作り、その中にinputタグでボタンが生成されるものだそう。
そのため、formの外で使用しないと思うようなbutton_toの役割ができないみたい。
フォームの外にbutton_toを設置することで「更新する」が正常に動作した。
[【Rails】 button_toの使い方をどこよりもわかりやすく解説!]
(https://pikawaka.com/rails/button_to#link_to%E3%81%A8%E3%81%AE%E9%81%95%E3%81%84)
<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %>
・
・
<div class="actions mt-3 text-center">
<%= f.submit "更新する", class: "btn btn-primary" %>
</div>
・
・
<% end %>
<%= button_to "削除する", registration_path(resource_name), data: { confirm: "本当によろしいですか?" }, method: :delete, class: "btn btn-danger" %>
対策2: button_toをlink_toに変更
<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %>
・
・
<div class="actions mt-3 text-center">
<%= f.submit "更新する", class: "btn btn-primary" %>
<%= link_to "削除する", registration_path(resource_name), data: { confirm: "本当によろしいですか?" }, method: :delete, class: "btn btn-danger" %>
</div>
・
・
<% end %>



