📄

【備忘録】remote: trueだっけ? local: trueだっけ?  

2022/06/27に公開

標題の通り。急に聞かれて回答に窮してしまったのでまとめておく。

そもそもremote,localオプションとは何か

remoteオプションはform_for,form_tagに使用されるオプションで、remote: trueと記述することでAjax通信でリクエストを送信することができます。

https://api.rubyonrails.org/v5.2/classes/ActionView/Helpers/FormHelper.html#method-i-form_for

Specifying: remote: true in the options hash creates a form that will allow > the unobtrusive JavaScript drivers to modify its behavior.

remote: trueを指定すると、控えめなJavascriptドライバが動作を変更するフォームが作成されます。

https://api.rubyonrails.org/v5.2/classes/ActionView/Helpers/FormTagHelper.html#method-i-form_tag

: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通信でリクエストを送信することができます。

https://api.rubyonrails.org/v7.0/classes/ActionView/Helpers/FormHelper.html#method-i-form_with

: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だけ覚えておけば良いでしょう。

と思ったらバージョンで違いがあるようだ

https://techracho.bpsinc.jp/hachi8833/2021_01_22/103256

Rails6.0、5.2、5.1ではデフォルトでAjaxレスポンスを返すようになっています。しかしながらRails6.1以降はデフォルトでremoteなしのフォームを生成するようになりました。

使用するRailsのバージョンをよくみて記述する必要がありますね。

Discussion