以前は Rails でbutton_to
タグを使用すると、このような確認ダイアログを使用することができました
<%= button_to 'Destroy', @post, method: :delete, data: { confirm: 'Are you sure?' } %>
data: { confirm: 'Are you sure?' }
内部で @rails/ujs ライブラリによって使用された Rails マジック データ属性です。
Rails 7 以降、このライブラリはデフォルトでは有効ではなくなりました。この Rails の代わりに Turbo ライブラリを使用します
そして今、このコードは機能しません
公式のRailsドキュメントとTurboハンドブックには情報がありません
私が試したこと
<%= 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フォーラムで見つかりました。刺激アクションを使用したこのソリューション。少しだけ改善します
<%= 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 がクールであることに慣れています。