はじめに
たとえばECサイトの購入ページからユーザー情報を更新した後、トップページに飛ばされたらどうでしょう?
ユーザーはまた購入画面にアクセスし直さなければならず、かなりUXが悪い状態になってしまいます。
直接指定すれば良いのでは?
もちろんページ同士が1対1の関係にある場合はこれでOKです。
しかし、ユーザー情報の更新などは他のページからも行えるようにしたいですよね。
ページの関係が多対1の場合、リンク元によって戻るページを変える必要があります。
1つ前のページに戻す方法
1つ前に戻る方法はRailsに標準メソッドにあるので簡単です。
redirect_back(fallback_location: root_path)
しかし、今回はこれを使うことができません。
実は「2つ前」に戻さないといけない
データの保存・更新では元のページ
→new
→create
と遷移するので元のページに戻るには2つ前に戻らないといけません。
そこで、戻りたいページのURLをセッションに保存し、create後にそのページに遷移する設定にします。
def new
session[:previous_url] = request.referer # ここで前ページセッションを保存
end
def create
redirect_to session[:previous_url] # create後に遷移させる
end
request.referer
で遷移元のURLを取得することができるので、それをセッションに保存し、createメソッド後に保存しておいたセッションを利用してnew直前のページに遷移させています。
これで2つ前のページに戻ることができます。
参考
Referer - HTTP | MDN
https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Referer
Action Controller の概要 - Railsガイド
https://railsguides.jp/action_controller_overview.html#request%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%A8response%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88