0
0

Rails7のTurboが原因でリダイレクト後にjsが動かなくなる

Posted at

概要

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0