0
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?

More than 1 year has passed since last update.

[Rails6.0] form_withのlocal trueの必要性

Posted at

mac OS バージョン11.6
Rails 6.0.4

未だにRails6.0を使ってる方は少ないと思いますが、一応備忘録として残しておきます。

はじめに

他ユーザーをフォローする機能を付けたところ、フォローボタンを押しても動かない。。
エラーメッセージも出ないためどこが間違っているのかわからず悪戦苦闘しました。

該当のコードは以下になります。

<%= form_with(model: current_user.relationships.build) do |f| %>
      <%= hidden_field_tag :follow_id, user.id %>
      <%= f.submit 'Follow', class: 'btn btn-primary w-100' %>
    <% end %>

原因

Ajax通信だった。
フォームの送信ボタンを押してもクルクルしない(画面がリロードしない)ことが原因でした。

解決策

local: trueを追記したら動くようになりました。

<%= form_with(model: current_user.relationships.build, local: true) do |f| %>

local trueとは

Rails 5.1〜6.0の場合、form_withのメソッドはデフォルトでAjax通信になっていて、非同期通信になってしまいます。(Rails 6.1からは同期通信がデフォルトに戻っています。Ajaxの最初の文字Asynchronousは非同期を意味します。)
なので通常のHTTPリクエストに戻す必要があるのですが、ここにlocal: trueと引数を渡す事で、ページ全体が返ってきてページがリロードされるようになります。

参考:https://qiita.com/kakudaisuke/items/e032c7705db00e8081dc

0
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
0
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?