LoginSignup
40
32

More than 3 years have passed since last update.

[Rails]遷移元のURLを取得してリダイレクトする方法

Last updated at Posted at 2020-06-14

やりたいこと

Railsで開発しているフリマアプリで、特定の処理後、遷移元のURLに戻る(リダイレクトする)ことをやりたい。
具体的には↓

  1. 商品ページから購入ボタンを押す
  2. クレジットカードが登録されていないと、クレカ登録画面に遷移
  3. クレカ登録後、購入しようとしてた商品ページに戻る(リダイレクトする)

元々はクレカ登録後、カード情報を表示する画面に遷移していました。
これだと、購入しようとしていた商品を再度探して購入ボタンを押さなければならない、というユーザーにとても不親切な挙動でした。

元の状況

※GIF見にくくて申し訳ありません…

商品ページで購入ボタン押す → クレカ登録画面に遷移(クレカが登録されていない場合)
92e9b1521895f97a6e1f2c4a46c7ce3f.gif

クレカ登録 → 登録したカード情報を表示する画面に遷移
e94f61e09decdfded6051eabaa91cd4b.gif

これではユーザビリティも悪いし、せっかく購入しようとした商品も「うわ、また探すの面倒。。買うのいいや」という状況になりかねないので、解決策を模索。うまく解決できたので記述します。

環境

Ruby 2.5.1
Rails 5.2.4

使うのはrequest.referer

記述自体はめちゃくちゃ簡単です。

creditcards_controller.rb
  def create
    render :new if params[:payjpToken].blank?
    customer = Payjp::Customer.create(card: params[:payjpToken])
    @card    = Card.new(user_id: current_user.id, payjp_id: customer.id)
    @card.save ? (redirect_to request.referer) : (render :new) # この行!!!
  end

endの上の行で、redirect_to request.refererと記述してますが、これで、カードの登録画面(creditcards/new)に遷移する前のURL(HTTPリファラ)を取得し、リダイレクトさせています。

修正後

カード登録 → 購入しようとしていたページに戻る → すぐ買える!
480ebbde6bc9bd533df8fadda2e06681.gif

こんな感じで解決できました。

(ちなみに? () : ()は三項演算子です。詳しくは伊藤さんのQiitaへ([初心者向け] RubyやRailsでリファクタリングに使えそうなイディオムとか便利メソッドとか)

Railsのrequestについてはこちら。
[Railsガイド]10 requestオブジェクトとresponseオブジェクト

referer(referrer)、HTTPリファラについてはググっていただくのがいいかと思います。

40
32
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
40
32