【问题标题】:Rails 7 I can't get the confirmation message to show before record is successfully deletedRails 7在成功删除记录之前我无法显示确认消息
【发布时间】:2022-08-14 13:40:00
【问题描述】:

在我的 Rails 7 应用程序中,我试图在用户按下“删除”按钮时显示确认消息。但是,当按下按钮时,它会立即删除记录而不显示确认提示。我正在使用设计来创建路线-我一直在尝试对此进行调查,并且似乎设计和/或 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


    【解决方案1】:

    我会试试这个:

    <%= 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 不同。

    【讨论】:

    • 感谢您的帖子,但由于某种原因,它仍然无法正常工作。仍在删除记录,但未显示确认消息。现在我想知道是否缺少某种代码或设置?我已经确认 turbo-rails 和stimulus-rails 在我的 Gemfile 中,stimulus-rails 的版本是 1.0.4,turbo-rails 在我的 Gemfile.lock 中的版本是 1.0.1。我不确定还有什么要检查的
    • @Needmorebooks 您可以将 button_tag 中生成的 HTML 表单粘贴到原始问题中吗?使用检查元素。检查数据确认属性。
    • 忽略评论 - 在原始问题中发布代码
    【解决方案2】:

    将此代码添加到您的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" %>
    

    它应该工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      • 1970-01-01
      • 1970-01-01
      • 2021-07-09
      • 2014-04-01
      • 2022-07-21
      • 2017-09-10
      相关资源
      最近更新 更多