form_withのlocalオプション
form_withではデフォルトでremote :trueになっている。
これを解除するのがlocalオプション。
デフォルトのままでは、 フォームは非同期通信としてJS方式で送られてしまう。
この場合、例えばビューからコントローラにフォームの内容を送って そこから別アクションへリダイレクトする際、 画面遷移されずエラーになる。
これはredirect_toが非同期通信に対応していないため反応しない。
redirect_toを有効にするには、 同期通信としてHTML方式で送る必要があるため form_withのオプションにlocal :trueをつけることで解決。
(/_form.html.erb) <%= form_with model: @post, local: true do |f| %> <%= f.label :body %> <%= f.text_area :body %> <%= f.submit %> <% end %>
(/posts_controller.rb) def new @post = Post.new end def create @post = Post.new(board_params) if @board.save redirect_to posts_path else render :new end end