Open uruu-github opened 1 week ago
原因はRails7から使用されるTurboによるもの。 6以前ではrails-ujsが対応していた?
link_toの場合、DELETEリクエストであっても、 デフォルトではGETリクエストとして送られるが、 javascriptによりDELETEなどリクエストが変更される。 rails7より上記の通りjavasceriptの挙動が変わっている。
参考記事 これのとおりやってみたけどだめやった。
Hotwireとは HotwireはRails7からRailsのデフォルトになった、モダンなWebアプリケーションを作るための新しいアプローチ。
また、そのなかでもTurboは下記の4つから構成される。
つまりこのような階層構造になっている。 Hotwire
この中のStradaとTurbo Nativeはモバイル開発で使う技術なので、Web開発の場合は以下の技術が利用される。
Turbo
Stimulus
HTMLをレスポンスすること。 フォーム、リンクからのリクエストはすべて非同期リクエストになる(すべてFetchAPIを利用する)。 fetchに対してJSONではなくHTMLをレスポンスする。 これによりレンダリングをサーバーサイドだけで行えるようになる。 今までのRailsアプリケーションの延長上でモダンなWebアプリケーションの開発ができる
turbo-railsはRailsからTurboを便利に使うためのgemである。 TurboはJavaScriptのライブラリで、Railsには依存していない。 (そのためTurboはRails以外でも使える)
RailsからTurboを直接使うこともできるが、turbo-railsを使うことでより便利に使えるようになる。 →直接使うよりも短いコードでかけるようになる。
turbo-rails利用時のデータの流れは下記の通り
サーバー側でturbo-railsによって解釈しタグを作成。 ブラウザ(クライアント)側で上記で作成したタグがTurboにより解釈されて要素が更新される。 以上のことよりRailsからTurboを使うときには、直接使うことはなく、turbo-railsを介して使う!
StimulusはTurboと相性が良いJavaScriptのライブラリのこと。
カオスになりがちなJavaScriptのコードにレールを敷く役割を担っている。
Turboを使うとJavaScriptを書かずに「サーバーサイドレンダリング + fetch」でHTML要素を更新できるようになる。 具体的にはRailsのScaffoldで用意される7つのアクション(index、show、new、create、edit、update、delete)は、JavaScriptなしでインタラクティブにできるようになる。 その結果、ReactやVueを使うのに比べて、JavaScriptを書く量は劇的に減る。
それでもJavaScriptが必要なケースは出てくる。そんな時には、Stimulusが用意するレールの上にJavaScriptを書くことになる。
HotwireはTurboとStimulusという2つのライブラリのパッケージのようなもの。Hotwireというライブラリがあるわけではない。
= javascript_include_tag "turbo", type: "module" この文章を入れることで解決できた!
%html
%head
= javascript_include_tag "turbo", type: "module"
= javascript_importmap_tags
ログアウトだけでなく記事の削除やフォロー機能も解決できた。
type: "module"を指定することで、TurboがESモジュールとして読み込まれるようになります。これにより、Turboの機能が正しく初期化され、JavaScriptの動作が期待通りになる可能性があります。ESモジュールは、スコープの分離や非同期読み込みをサポートしており、これがTurboの動作に影響を与えた可能性があります。
Turboが正しく読み込まれることで、RailsのUnobtrusive JavaScript(UJS)機能も適切に動作するようになります。data-method="delete"のような属性が正しく処理され、期待通りにDELETEリクエストが発行されるようになった可能性があります。もしUJSが読み込まれていなかった場合、data-method属性が無視されてGETリクエストが発行されていたかもしれません。
Turboが適切に読み込まれたことで、他の関連するJavaScriptコードやライブラリ(例えば、StimulusやActionCable)が正しく動作し、全体としてアプリケーションのJavaScriptの動作が改善された可能性があります。
以前の設定や読み込みに問題があった場合、ブラウザのキャッシュが影響していた可能性もあります。javascript_include_tagでTurboを明示的に読み込むことで、これがクリアされたり再初期化されたりしたかもしれません。
このように、javascript_include_tag "turbo", type: "module"を追加することで、Turboが適切に読み込まれ、全体的なJavaScriptの動作が改善されたと考えられます。引き続き、他の部分にも影響がないか確認しながら開発を進めてください。
ビシッということでゴチャゴチャが解除された感じやと思う。 基本的に設定は線でいいはずやけど…
rails assets:precompileをやってなかったのが原因かも
前回解消したはずなのになってしまう。
(✗)data: {method: 'post'}
(○)data: {turbo-method: :post}
まえはこういうふうにしたら行けた。 けど今回はならない。