Posted at

Railsでログイン前にいたページを維持する

More than 5 years have passed since last update.


ログイン時のページ遷移

見てた所に戻れないとイヤですよね。


store_location

ApplicationControllerbefore_filterとしてstore_locationと言う名前で、ユーザが居た場所を覚えておきます。

# app/controllers/application_controller.rb

class ApplicationController < ActionController::Base
before_filter: store_location

def store_location
session[:return_to] = request.url
end

end


redirect_back_or(default)

SessionsControllerSessionsHelperredirect_back_or(default)と言う名前で、ユーザが居た場所を覚えていればその場所に、無ければデフォルトに飛ばす、としておきます。

# app/controllers/sessions_controller.rb | app/helpers/sessions_helper.rb

def redirect_back_or(default)
redirect_to(session[:return_to] || default)
session.delete(:return_to)
end


skip_before_filter

後は保存されているlocationを呼び出したいcontrollerでredirect_back_orを利用すればOKです。

変な場所にredirectされる場合は、利用するcontroller部分でskip_before_filterを使い、store_locationを走らせないようにしておくと幸せになれるかも知れません。

仮にSessionsControllerとする場合は

# app/controllers/sessions_controller.rb

class SessionsController < ApplicationController
skip_before_filter :store_location

def create
# login user
redirect_back_or root_url
end
end

と言った感じですね。