viewを持つcreateアクション、という、ちょっと変なコードを書いていて、
ログを見る限りrenderしているはずなのに、画面が遷移しない、という現象に出くわして、かなりハマってしまったので書いてみました。
form_withはデフォルトだとXMLHTTPRequestで通信してる
上記の現象の原因を探っていて、ログにJSが動いた形跡を見つけて、form_withの仕様によるものであることにたどり着きました。
form_withがデフォルトだとXMLHTTPRequestで通信しており、ゆえにrenderを書いても画面が遷移しない、ということがおこります。
ドキュメントのとおりです。
https://api.rubyonrails.org/v5.2.3/classes/ActionView/Helpers/FormHelper.html#method-i-form_with
ドキュメントのとおり、local: trueを渡せばちゃんと同期通信してくれます。
普段からform_withに慣れている人には特に違和感ない挙動なのだと思いますが、古いRailsのコードに慣らされてるせいで全然気づきませんでした。
どこかで同じようにハマった誰かがこの記事にたどり着きますよう。