Hitsuji_monのブログ~ 村上春樹のあれ ~

文学好きな組み込み系エンジニア

ブラウザでTurbolinkのWarnigが出たとき

TurbolinkのWarning問題
状況

ブラウザの検証ツールで見ると、次のようなWarnigが出る

You are loading Turbolinks from a <script> element inside the <body> element. This is probably not what you meant to do!
Load your application’s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.
For more information, see: https://github.com/turbolinks/turbolinks#working-with-script-elements

turbolinkをhtmlで読むときはhead内に書いてねと言っている
こちらの記事がすぐヒットした
Turbolinks を body タグ内で start させてはいけない · GitHub


原因
しかし今回は正しく記述しているので上記が原因ではなかった

理由: javascriptを二重に読み込んでいた

  • application.jsでjavascriptの読み込みをjsディレクトリ全体に指定
  • application.html.hamlでapplication.jsを読むようにheadに記述



解決
application.html.hamljavascriptの読み込みの記述を削除
↑これでエラーは出なくなるが,別の問題が生じた

問題: deviseでsign_outを正しく記述してもリクエストがGETで送信される
$ rails routes を実行すると以下のように正しくなっているのになぜ
$ destroy_user_session DELETE /users/sign_out(.:format)

deviseのセッションの消去を正しく使うには、viewでjavascriptの読み込みを正しく行う必要がある

# 誤り
= javascript_include_tag 'application', media: 'all', 'data-turbolinks-track' => true 
# 正しい: turbolinksのreloadの記述
= javascript_include_tag 'application', 'data-turbolinks-track': 'reload'

やっとsign_outが直った