Help us understand the problem. What is going on with this article?

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

と言った感じですね。

foloinfo
foloinfo / CEO at byus&co.ltd // Vimmer, 最近はめっきりReact
https://drip.ink
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away