LoginSignup
9
4

More than 5 years have passed since last update.

formでpostリクエストを送るが画面遷移しない

Posted at

解決方法

formヘルパー内でlocal属性をtrueに指定する

<%= form_with model: @model, local: true do |f| %>

以下詳細

(注意:根本原因にあたる「Ajax通信」についての知識が甘いため、見当違いのことを書いている場合があります。その場合はお手数ですがコメントでご指摘いただけると幸いです。)

画面遷移しない状況

dbに取得した値を保存する際、「form->確認画面->result」というように確認画面をはさむと「form->確認画面」で画面遷移しなかった

理由

railsのデフォルト設定ではformヘルパー内でdata-remote="true"が指定されており、Ajax通信が行われるため。

解決方法

form内でlocal: trueを指定することでAjax通信(remote + unobtrusive XHR送信)が無効になる。

Ajaxとは

(https://railsguides.jp/working_with_javascript_in_rails.html より引用)

Ajaxを理解するには、Webブラウザの基本的な動作について理解しておく必要があります。

ブラウザのアドレスバーにhttp://localhost:3000 と入力して'Go'を押すと、ブラウザ (つまりクライアント) はサーバーに対してリクエストを1つ送信します。ブラウザは、サーバーから受け取ったレスポンスを解析し、続いて必要なすべてのアセット (JavaScriptファイル、スタイルシート、画像) をサーバーから取得します。続いてブラウザはページを組み立てます。ブラウザに表示されているリンクをクリックすると、同じプロセスが実行されます。ブラウザはページを取得し、続いてアセットを取得し、それらをすべてまとめてから結果を表示します。これが、いわゆる「リクエスト-レスポンス」のサイクルです。

JavaScriptも、上と同様にサーバーにリクエストを送信し、レスポンスを解析することができます。JavaScriptはページ上の情報を更新することもできます。JavaScriptの開発者は、ブラウザとJavaScriptという2つの力を1つに結集させることで、現在のWebページの一部だけを更新することができます。必要なWebページをサーバーからすべて取得する必要はありません。この強力な技法が、Ajaxと呼ばれているものです。

9
4
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
9
4