10
10

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 3 years have passed since last update.

【Rails】でデータを保存・更新後に直前のページに戻りたい!

Posted at

はじめに

たとえばECサイトの購入ページからユーザー情報を更新した後、トップページに飛ばされたらどうでしょう?
ユーザーはまた購入画面にアクセスし直さなければならず、かなりUXが悪い状態になってしまいます。

そこで、元の購入ページへ戻す方法を調べてみました。

直接指定すれば良いのでは?

もちろんページ同士が1対1の関係にある場合はこれでOKです。

しかし、ユーザー情報の更新などは他のページからも行えるようにしたいですよね。
ページの関係が多対1の場合、リンク元によって戻るページを変える必要があります。

1つ前のページに戻す方法

1つ前に戻る方法はRailsに標準メソッドにあるので簡単です。

redirect_back(fallback_location: root_path)

しかし、今回はこれを使うことができません。

実は「2つ前」に戻さないといけない

データの保存・更新では元のページnewcreateと遷移するので元のページに戻るには2つ前に戻らないといけません。

そこで、戻りたいページのURLをセッションに保存し、create後にそのページに遷移する設定にします。

controller
  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

Railsで遷移元のURLを取得する方法
https://qiita.com/taka_571/items/9b1c82d8fcc602df8a1a![C4CEA757-38D3-4557-A690-5176C5FA5FED_1_105_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672627/169675de-3a9a-6c9b-fc99-8bdffd5be323.jpeg)

10
10
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
10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?