Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails関連

Rails 6.1で form_withのデフォルトが「remoteなし」になった(翻訳)

概要

原著者の許諾を得て翻訳・公開いたします。

Rails 6.1で form_withのデフォルトが「remoteなし」になった(翻訳)

Railsのベテランなら、従来のあらゆるformヘルパーと同様、form_withヘルパーもHTMLレスポンスを返すことを期待するでしょう。しかし、form_withのデフォルトオプションはAjaxレスポンスを返すようになりました(訳注: これはRails 6.0、5.2、5.1が該当します。従来のform_forはデフォルトがremoteではなかったので、この文はそのことを指していると考えられます)。

この変更によってJavaScriptレスポンスがレンダリングされると、Railsの初心者が戸惑いがちでした。幸い、ごく最近のプルリク(#40708)によってこの変更が取り消され、デフォルトでHTMLレスポンスをレンダリングするようになりました。

改修前

改修前のform_withは、デフォルトでremoteフォームを生成しました。

<%= form_with url: tags_url do |f| %>
  <%= f.text_field :name %>
  <%= f.submit %>
<% end >

上のerbコードはフォームをAjaxリクエストとして送信します。この挙動はlocalオプションで変更可能です。local: trueを指定すると、フォームを従来のHTMLリクエストとして送信します。

改修後

改修後の新しいRails 6.1アプリケーションは、すべてデフォルトでremoteなしのフォームを生成するようになりました。Railsフォームのこのデフォルトオプションは、以下の設定で上書きすることもできます。

config.action_view.form_with_generates_remote_forms

このform_with_generates_remote_formsにはtrueまたはfalseを指定できます。

訂正(20210226)

以下のご指摘をいただき、元の記事タイトル「Rails 6.1で form_withのデフォルトが「remoteなし」に戻った」を修正し、本文に追記しました。ありがとうございます🙇。

関連記事

Rails 5.1〜6: ‘form_with’ APIドキュメント完全翻訳


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。