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

问题描述 投票:0回答:5

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

这是我的开始:

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

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

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

然后我尝试创建一个名为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()
    }
  }
}

并相应更新了我的按钮:

<div class="d-flex" data-controller="friends">
    <%= button_to "Delete", @friend, method: :delete, data: { action: "click->friend#delete" } %>
</div>

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

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

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

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

编辑:-----

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

<form class="button_to" method="post" action="/friends/1">
  <input type="hidden" name="_method" value="delete" autocomplete="off">
  <button data-action="click->friend#delete" class="btn btn-danger mx-1" type="submit">Delete</button>
  <input type="hidden" name="authenticity_token" value="(long line of random letters)" autocomplete="off">
</form>

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

devise ruby-on-rails-7
5个回答
12
投票

我会尝试这个:

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

因为您使用的是 Turbo,所以需要将

data-turbo-confirm
添加到表单本身,这与在 Rails-ujs 中不同。您可以将其添加到按钮中。

请记住,

button_to
生成的表单与
link_to
不同。


2
投票

在rails7中,你可以尝试:

<%= button_to "delete", url_path, class: "item", method: :delete, data: { turbo_confirm: 'operate.delete_confirm?'} %>

1
投票

请尝试以下方法,它对我有用:

<%= link_to 'destroy', friend, data: { turbo_method: :delete, turbo_confirm: "Are you sure?"} %>

或者:

<%= link_to 'destroy', @friend, data: { turbo_method: :delete, turbo_confirm: "Are you sure?"} %>

0
投票

将此代码添加到您的

devise.rb
的配置文件下:

config.navigational_formats = ['/', :html, :turbo_stream]

那就试试这个:

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

应该可以。


0
投票

我通过编辑 gemfile 修复了它

gem 'turbo-rails', '~> 1.0'

<%= button_to "Delete", record, data: { turbo_confirm: "Are you sure?" }, method: :delete, class: "btn btn-danger btn-sm" %>

© www.soinside.com 2019 - 2024. All rights reserved.