- Ruby / Rails関連
READ MORE
原著者の許諾を得て翻訳・公開いたします。
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なし」に戻った」を修正し、本文に追記しました。ありがとうございます🙇。