Turboとは
Railsアプリの開発で直面する問題として、著名ないくつかのGemがインストールできないというものの他に、以下のようなものがあります。
・画面遷移が行われない
・Javascriptのloadイベント等が発火されない
等など
その他トラブルに関しては以下の記事で詳しくまとめてくださっています。
これは、デフォルトでインストールされるTurboによって引き起こされている問題です。
Turboには以下のような機能があります。
・Ajaxで良さげに部分更新してくれる
・SPAっぽいものを手軽に書ける
・delete等のmethodでリクエストを投げられる
・確認ダイアログを手軽に出してくれる
しかし、自動で入って自動で動作するため、余計なおせっかいとなることも多く、とりわけ画面遷移が行われない問題とJavascriptのloadが発火されない問題に直面する人も多いと思います。
ところが、だからといってGemをインストールしなければ、各種methodを投げることや確認ダイアログを表示することが手間になってきます。
では、どうすればよいか。
アプリ全体で無効化して部分的に有効化する
・想定外の箇所でのトラブルを無くしたい
・各種methodでのリクエストや確認ダイアログは意図して行うもの
上記を考えると、全体で無効化して部分的に有効化するオプトインの形を取ったほうが良いでしょう。
具体的な方法は以下のとおりです。
// Configure your import map in config/importmap.rb. Read more: https://github.com/rails/importmap-rails
import "@hotwired/turbo-rails"
import "controllers"
Turbo.session.drive = false; # この行を追加してTurboを無効化する
<div data-turbo="true"> <!-- 先祖要素に data-turbo="true"を追加 -->
<%= link_to "ログアウト", destroy_user_session_path, data: { "turbo-method": :delete, "turbo_confirm": "ログアウトしますか?" } %>
</div>
これだけでOK。
data-turbo="true"の内側のブロックでだけTruboが有効になります。
まぁ、実際問題向き合っていると言うよりは上手いこと逃げているだけですが、多分これが最良だと思います。