フレンドリーフォワーディングを実装

フレンドリーフォワーディングを実装

みなさんこんにちは、新人の意識高丸です。
昨日も初心者向けRuby勉強会、gaienrbに参加してきました。
(http://www.circleaf.com/events/72)
前回に引き続きチュートリアルをすすめていき、ログイン後のフレンドリーフォワーディングを実装しました。

■チュートリアルURL
http://railstutorial.jp/chapters/updating-showing-and-deleting-users?version=4.0#sec-friendly_forwarding

フレンドリーフォワーディングというのは、ログインが必要なページ(仮にAページとします)に未ログイン状態でアクセスした場合に、ログイン画面に遷移させてログインした後はAページに戻すというものです。
このような機能はどこのサイトでも普通に実装されているものだと思っていたのですが、これをフレンドリーフォワーディングと呼ぶというのは知りませんでした。

実装は、まずセッションヘルパーで以下のような2つのメソッドを定義します。

“`app/helpers/sessions_helper.rb
module SessionsHelper
.
.
.
def redirect_back_or(default)
redirect_to(session[:return_to] || default)
session.delete(:return_to)
end

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

そして、ユーザのサインイン状態をチェックするために実装したsigned_in_userの中で呼び出します

“`app/controllers/users_controller.rb
class UsersController < ApplicationController before_action :signed_in_user, only: [:edit, :update] before_action :correct_user, only: [:edit, :update] . . . def signed_in_user unless signed_in? store_location redirect_to signin_url, notice: "Please sign in." end end def correct_user @user = User.find(params[:id]) redirect_to(root_path) unless current_user?(@user) end end ``` request.urlからリクエストされたuriを取得してセッション変数の中に戻るためのURLを保存しておき、ログイン後にはセッション変数にリダイレクトURLが存在したらそこにリダイレクトするという処理を入れます。 この処理は先ほど定義したSessionsHelperに実装したredirect_back_orメソッドが担っています。 当然、リダイレクトURLがセッション変数に残らないよう、遷移させたあとはセッション変数からリダイレクトURLを削除します。 リダイレクト処理の以下の部分はRubyっぽい書き方だと思いました。 Rubyでは条件分岐の戻り値が「最後に評価した値を返す」ということなのでこのような書き方もできるのだと思いました。 ``` redirect_to(session[:return_to] || default) ``` Rubyは短く書くことができる言語なので、改めて手に馴染む言語だと実感しました。

TAG

  • このエントリーをはてなブックマークに追加
意識 高丸
エンジニア 意識 高丸 takamaru

Rubyについて日々勉強している新人エンジニアです。初心者向けRuby勉強会のレポートなどを投稿していきます。