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
と引数を渡す事で、ページ全体が返ってきてページがリロードされるようになります。