概要
Turboが有効なRails7にて、削除処理を行った後リダイレクトするとjsが聞かなくなってしまった。
元のコード
erb
<%= link_to '削除する', users_memo_path(@memo.id), data: { turbo_method: :delete }, class: 'delete-button button' %>
controller
def destroy
memo = Memo.find(params[:id])
memo.destroy if memo.user_id == current_user.id
redirect_to users_memos_path, status: :see_other
end
js
document.addEventListener('DOMContentLoaded', function() {
// 既存の処理
});
成功した方法
Turboが読み込まれた際にjsを実行するように変更
document.addEventListener('turbo:load', function() {
// 既存の処理
});
(おまけ)やってみたこと
1. Turboを無効にしてみる
<%= link_to '削除する', users_memo_path(@memo.id), data: { turbo: false, turbo_method: :delete }, class: 'delete-button button' %>
結果: Turboは無効になったがturbo_method: :delete
も無効になってしまった。
2. button_toを使ってみる
erb
<%= button_to '削除する', users_memo_path(@memo.id), method: :delete, data: { turbo: false }, class: 'delete-button button', form: { class: 'delete-form' } %>
js
document.querySelector('.delete-form').setAttribute('action', '/users/memos/' + data.id);
結果: 行クリックで詳細なメモデータを取得し、削除のURLを変更していたことが原因でCan't verify CSRF token authenticity.
のエラー。
参考: https://halkyo.com/post/web/rails7-turbo-redirect-to-javascript-not-working