local: trueについて
local: trueとは
Railsはデフォルトで同期処理になっています。
しかし、form_withはデフォルトで非同期処理(ajax)になっています。
※Rails5.2< あなたが使用しているRailsのバージョン < Rails 7.0の状態の場合
そこで、下記のようにform_withにlocal: trueオプションを付与することで、form_withが非同期処理から同期処理に変更されます。
それがlocal: trueオプションになります。
<%= form_with model: @board, class: 'new_board', local: true do |f| %>
<div class="mb-3">
<%= f.label :title %>
<%= f.text_field :title, class: 'form-control' %>
</div>
<div class="mb-3">
<%= f.label :body %>
<%= f.text_area :body, class: 'form-control', rows: '10', style: 'height: 200px' %>
</div>
<%= f.submit class: 'btn btn-primary'%>
<% end %>
しかし、現在Railsを使用している方は大方Rails7以降のバージョンを使用されていると思います。
Rails7以前のRails6.0代ではform_withが非同期処理になっていたことから、ページ全体のリロードが必要であり、その際には
<%= form_with model: @board, class: 'new_board', local: true do |f| %>
と記載する必要があった。
ex)エラーのフラッシュメッセージの表示等
(Rails5.2以前はデフォルトで同期処理になっていた)
しかし、Rails7.0以降からは、再度、form_withが同期処理(Railsのデフォルトと同じ仕様)に戻ったため、
local: true
の明記することなく、form_withを使用しても、同期処理のままとなり、エラーメッセージも問題なく表示されるようになっている。
バージョンによって仕様が変更されている
Railsに限りませんが、バージョンをごとに使用が変更されているので、ドキュメントや、最新の情報にアクセスすることが重要だと実感しました。
私はRails7で実装していたのですが、Rails6の記事を参考にしており、Rails6のform_withが非同期処理なら、Rails7も非同期だろうと勝手な憶測を持って実装していましたが、この意識で実装していると後々大事故に発展しかねないといい教訓になりました。
初学者の方は、私も含め割とそのような感覚で実装されているからが多いと思います。
これからはしっかり上記の意識を持って学習していこうと思います。