コントローラーでリダイレクトさせる際にrequest.referer
という見慣れない記述を見かけたので調べてみました。
結論
request.referer
で遷移元のURLを取得できる。
requestとは?
現在実行中のリクエストサイクルの中でリクエスト情報が保存されているrequestオブジェクトを表示するメソッド。
レスポンス情報が保存されているresponseオブジェクトを表示するresponse
メソッドも用意されている。
Action Controller の概要 - Railsガイド
refererとは?
リクエスト情報の中の遷移元の情報を表示するRailsに用意されているメソッド。
request.env
の中のHTTP_REFERER
に遷移前の情報が保存されているようです。
referer
メソッドは内部的にこのrequest.env['HTTP_REFERER']
を参照しています。
[Rails]遷移元のURLを表示する方法 | COTeggのバケツ
referer (Rack::Request) - APIdock
responseを使ってレスポンス情報を表示してみる
コントローラー内の適当なアクションにbinding.irb
をセットし、遷移時のレスポンス情報を表示してみます。
# users_controller.rb class UsersController < ApplicationController def show binding.irb # 処理を止めてshowアクション時のレスポンス情報を見てみる @user = User.find(params[:id]) # 何かしらの処理 end end
request
、request.referer
、request.env['HTTP_REFERER']
のそれぞれの出力結果です。
> request => #<ActionDispatch::Request GET "http://localhost:3000/users/8" for ::1> > request.referer => "http://localhost:3000/users/8" > request.env['HTTP_REFERER'] => "http://localhost:3000/users/8"
前述したようにrequest.referer
、request.env['HTTP_REFERER']
の出力は同じ値になっています。
便利な使い方
コントローラーでリダイレクトさせる際に遷移元のURLを取得し、遷移させることができる。
[Rails]遷移元のURLを取得してリダイレクトする方法 - Qiita
# 何かしらのcontroller def method # 何かしらの処理 redirect_to request.referer # 遷移元のURLにリダイレクトする end
まとめ
request.referer
は今後使い道がありあそうなので知っておいて良かった。
参照
Action Controller の概要 - Railsガイド
[Rails]遷移元のURLを表示する方法 | COTeggのバケツ