1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Rails】 local: trueについて

Posted at

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も非同期だろうと勝手な憶測を持って実装していましたが、この意識で実装していると後々大事故に発展しかねないといい教訓になりました。

初学者の方は、私も含め割とそのような感覚で実装されているからが多いと思います。

これからはしっかり上記の意識を持って学習していこうと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?