在我的 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>
我删除了实际的真实性令牌,因为我认为这些应该保密。我知道这只是一个示例项目,但我不确定这是否是我的计算机所特有的。感谢您在我学习期间对我的耐心指导!
我会尝试这个:
<%= 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
不同。
在rails7中,你可以尝试:
<%= button_to "delete", url_path, class: "item", method: :delete, data: { turbo_confirm: 'operate.delete_confirm?'} %>
请尝试以下方法,它对我有用:
<%= 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?"} %>
将此代码添加到您的
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" %>
应该可以。
我通过编辑 gemfile 修复了它
gem 'turbo-rails', '~> 1.0'
。
<%= button_to "Delete", record, data: { turbo_confirm: "Are you sure?" }, method: :delete, class: "btn btn-danger btn-sm" %>