Rails 7 在成功删除记录之前我无法显示确认消息

Nee*_*oks 12 devise ruby-on-rails-7

在我的 Rails 7 应用程序中,我尝试在用户按下“删除”按钮时显示确认消息。但是,当按下按钮时,它会立即删除记录,而不显示确认提示。我正在使用 devise 来创建路线 - 我一直在尝试研究这一点,似乎 devise 和/或 Turbo 存在某种损坏的功能,从而破坏了确认对话框?

这是我开始的内容:

<%= button_to 'Delete', @friend, method: :delete, data: { confirm: 'Are you sure?' }, class: "btn btn-danger mx-1" %>
Run Code Online (Sandbox Code Playgroud)

这很好地删除了记录,只是不显示确认。以下是我尝试过的其他一些行,我相信它们应该可以工作,因为如果我理解正确的话,Turbo 应该随 Rails 7 一起安装:

<%= button_to 'Delete', @friend, method: :delete, data: {turbo_method: :delete, turbo_confirm: 'Are you sure?'}, class: "btn btn-danger mx-1" %>
Run Code Online (Sandbox Code Playgroud)
<%= button_to 'Delete', @friend, method: :delete, data: { turbo_confirm: 'Are you sure?' }, class: "btn btn-danger mx-1" %>
Run Code Online (Sandbox Code Playgroud)

然后,我尝试创建一个名为friend_controller.js 的 Stimulus 类并将其放入 Friends/app/controllers 文件夹中:

import { Controller } from "@hotwired/stimulus"

export default class extends Controller {
  delete(event) {
    let confirmed = confirm("Are you sure?")

    if (!confirmed) {
      event.preventDefault()
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

并相应更新了我的按钮:

<div class="d-flex" data-controller="friends">
    <%= button_to "Delete", @friend, method: :delete, data: { action: "click->friend#delete" } %>
</div>
Run Code Online (Sandbox Code Playgroud)

每个选项都是完美删除记录,只是不显示确认消息。

我正在尝试按照 YouTube 教程构建这个作为我的第一个 Ruby 应用程序,但该视频是 2020 年的,所以使用的是 Rails 6。我正在参加一个学习软件开发的大学课程,所以我想我应该挑战一下我自己也将其更新到当前版本,好吧,我面临挑战。这是在完成本教程之前我需要弄清楚的最后一件事。

在我看到的其他问题中,他们不需要发布 Gemfile 或生成的设备friends_controller.rb,但如果我需要在这里发布它们,请告诉我。

非常感谢您提供的任何帮助!

编辑: - - -

这是我认为所要求的(生成的 HTML)。我通过打开页面、右键单击、选择“检查”并找到相关按钮的 HTML 部分来得到此信息:

<%= button_to 'Delete', @friend, method: :delete, data: { confirm: 'Are you sure?' }, class: "btn btn-danger mx-1" %>
Run Code Online (Sandbox Code Playgroud)

我删除了实际的真实性令牌,因为我认为这些应该保密。我知道这只是一个示例项目,但我不确定这是否是我的计算机所特有的。感谢您在我学习期间对我的耐心指导!

Aus*_*ale 11

我会尝试这个:

<%= button_to 'Delete', @friend, method: :delete, form: { data: { turbo_confirm: 'Are you sure?' } }, class: "btn btn-danger mx-1" %>
Run Code Online (Sandbox Code Playgroud)

因为您使用的是 Turbo,所以您需要将 添加data-turbo-confirm到表单本身,这与在 Rails-ujs 中不同。您可以将其添加到按钮中。

请记住button_to生成的表单不同于link_to.