質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

13081閲覧

【Rails】Deviseの複数モデルにて、それぞれのログイン・ログアウト・サインアップ後のリダイレクト先を個別に設定したい

jusco

総合スコア80

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

4クリップ

投稿2015/08/10 13:26

Railsでの開発において、Deviseという認証gemを使用して複数モデルの認証を実装しました。
そこで、各モデルにおいて認証後にそれぞれで設定した個別ページにリダイレクトを行いたいです。

現在、いくつかの場合において、認証後に、直前にいたページにリダイレクトを行う処理までは実装しています。

Ruby

1class ApplicationController < ActionController::Base 2 after_filter :store_location 3 4 def store_location 5 if (request.fullpath != "/users/sign_in" && \ 6 request.fullpath != "/users/password" && \ 7 request.fullpath != "/shops/password" && \ 8 !request.xhr?) # don't store ajax calls 9 session[:previous_url] = request.fullpath 10 end 11 end 12 13 def after_sign_in_path_for(resource) 14 session[:previous_url] || root_path 15 end 16 17 def after_sign_out_path_for(resource) 18 session[:previous_url] || root_path 19 end 20end

ここから、Shop,User,Admin(ActiveAdmin)の3つのモデルにおいて、以下の様な仕様を設定したいです。

・User
◯新規登録後はuser#showにリダイレクト
◯ログイン後は直前のページにリダイレクト(実装済み)
・Shop
◯ログイン,新規登録後はshop#showにリダイレクト
・Admin
◯ログイン後はadmin_root_pathにリダイレクト
・共通
◯ログアウト後はroot_pathにリダイレクト

どのような記述を以って、上記の仕様を実装すればいいでしょうか。
ご回答、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まず、ログイン後と新規登録後の処理を分けたい場合は、公式ドキュメントを参考にして RegistrationControllerをカスタマイズ可能にし、そのコントローラーにafter_sign_up_path_forというメソッドがあるので、それを上書きすればよいです。

次に、三つのモデルで分けたいということですが、たぶんこんな感じになると思います。

lang

1def after_sign_in_path_for(resource) 2 case resource 3 when User 4 session[:previous_url] || root_path 5 when Shop 6 shop_path(resouce) 7 when Admin 8 admin_root_path 9 end 10end

ログアウト後は

lang

1def after_sign_out_path_for(resource) 2 root_path 3end

として、常にroot_pathを返せばよいです。

投稿2015/08/10 15:52

hello-world

総合スコア1342

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jusco

2015/08/10 16:03

ご回答、ありがとうございます。 うまく機能を実装することが出来ました!! いつもありがとうございますm(__)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問