Rails|ログイン後に、ログイン前に閲覧していたページに遷移する

2023/09/11に公開

開発環境

ruby 3.1.2p20
Rails 6.1.7.4
Cloud9

コントローラーの編集

application_controller.rb
class ApplicationController < ActionController::Base
  after_action :store_location

  def store_location
      if (request.fullpath != "/users/sign_in" && \
          request.fullpath != "/users/sign_up" && \
          request.fullpath != "/users/password" && \
          !request.xhr?) # don't store ajax calls
        session[:previous_url] = request.fullpath
      end
  end

  #ログイン後のリダイレクトをログイン前のページにする
  def after_sign_in_path_for(resource)
    session[:previous_url] || root_path
  end

end

store_locationメソッド
アクセスされたページのURLをセッションに保存するメソッド。

request.fullpath
現在のページのフルパスを取得するメソッド。

if (request.fullpath != "/users/sign_in" && \ ...
「現在のページのフルパスが、ログインページ、新規登録ページ、非同期通信、パスワード変更ページではない場合」という意。

!request.xhr?
現在のリクエストが非同期通信ではない場合にtrueを返す。

session[:previous_url] || root_path
session[:previous_url]が存在する場合はそのURLを、存在しない場合はroot_path(ホームページのURL)を返す。

参考にさせていただいた記事

https://qiita.com/kimihito_/items/0835e2b0eb9daa3f49e7

Discussion