如何使用 Turbo 在 Rails 中使用 button_to 调用确认提示

How to call confirm prompt using button_to in Rails with Turbo

以前在 Rails 中使用 button_to 标签时,可以使用这样的确认对话框

<%= button_to 'Destroy', @post, method: :delete, data: { confirm: 'Are you sure?' } %>

data: { confirm: 'Are you sure?' } 是 Rails 魔法数据属性,被 @rails/ujs 库在后台使用

在Rails 7之后,默认情况下不再启用此库。而不是这个 Rails 使用 Turbo 库

现在这段代码不起作用

官方暂无信息Rails docs and Turbo handbook

我试过的

<%= button_to 'Destroy', @post, method: :delete, data: { turbo_confirm: 'Are you sure?' } %>
<%= button_to 'Destroy', @post, method: :delete, data: { 'turbo-confirm': 'Are you sure?' } %>

但是没有结果

我没有在 SO 上找到任何解决方案,但在 Hotwire forum 上找到了。该解决方案具有刺激作用。我只是稍微改进一下

<%= form_with model: @post, method: :delete, data: { controller:  'confirmation', message: 'Are you sure?', action: 'submit->confirmation#confirm' } do |f| %>
  <%= f.submit 'Destroy' %>
<% end %>
// app/javascript/confirmation_controller.js
import { Controller } from '@hotwired/stimulus'

export default class extends Controller {
  confirm(event) {
    if (!(window.confirm(this.element.dataset.message))) {
      event.preventDefault()
    }
  }
}

可以,但是比较难,而且看起来很丑,我们习惯了Rails很酷

在 Rails 中使用没有 rails-ujs 的 Turbo 调用确认弹出窗口 window 使用 button_to 我们需要使用这样的代码

<%= button_to 'Destroy', @post, method: :delete, form: { data: { turbo_confirm: 'Are you sure?' } } %>

<%= button_to 'Destroy', @post, method: :delete, form: { data: { 'turbo-confirm': 'Are you sure?' } } %>

两者都生成data-turbo-confirm属性

因此我们需要添加此属性而不是提交按钮(如 rails-ujs)但 directly to form 包含此按钮(让我提醒您此标签生成带有按钮的表单)

我不完全理解这一点,但以下内容对我有用

<%= button_to post_path(post), method: :delete, form: { data: { turbo_confirm: 'Are you sure?' } } do %>

an svg which shows a trash can

<% end %>.

我也没有任何看起来像 OP 的东西 confirmation_controller