【備忘録】remote: trueだっけ? local: trueだっけ?
標題の通り。急に聞かれて回答に窮してしまったのでまとめておく。
そもそもremote,localオプションとは何か
remoteオプションはform_for
,form_tag
に使用されるオプションで、remote: true
と記述することでAjax通信でリクエストを送信することができます。
Specifying: remote: true in the options hash creates a form that will allow > the unobtrusive JavaScript drivers to modify its behavior.
remote: true
を指定すると、控えめなJavascriptドライバが動作を変更するフォームが作成されます。
:remote - If set to true, will allow the Unobtrusive JavaScript drivers to control the submit behavior. By default this behavior is an ajax submit.
:remote - trueに設定すると、控えめなJavascriptドライバが通信動作を制御できるようになります。デフォルトでは、この動作はajax通信です。
一方でlocalオプションはform_with
に使用されるオプションで、local: true
と記述することでhttp通信でリクエストを送信することができます。
:local - Whether to use standard HTTP form submission. When set to true, the form is submitted via standard HTTP. When set to false, the form is submitted as a “remote form”, which is handled by Rails UJS as an XHR.
標準のHTTPフォーム送信を使用するかどうかを指定します。trueに設定すると、標準的なHTTPでフォームが送信されます。falseに設定すると、フォームは「リモートフォーム」として送信され、Rails UJSによってXHRとして処理されます。
この時点で大分ややこしいですが、基本的にはRails5.1以降はform_with
が推奨となりましたので、local: true
だけ覚えておけば良いでしょう。
と思ったらバージョンで違いがあるようだ
Rails6.0、5.2、5.1ではデフォルトでAjaxレスポンスを返すようになっています。しかしながらRails6.1以降はデフォルトでremoteなしのフォームを生成するようになりました。
使用するRailsのバージョンをよくみて記述する必要がありますね。
Discussion