ログイン時のページ遷移
見てた所に戻れないとイヤですよね。
store_location
ApplicationController
のbefore_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)
SessionsController
やSessionsHelper
にredirect_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
と言った感じですね。