概要
原著者の許諾を得て翻訳・公開いたします。
- 英語記事: Rails form_with now defaults to non-remote forms | Saeloun Blog
- 原文公開日: 2021/01/18
- 著者: Swaathi Kakarla
- サイト: Saeloun Blog | Ruby on Rails Consulting Company based in San Francisco and Boston
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なし」に戻った」を修正し、本文に追記しました。ありがとうございます🙇。