2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

deviseにてユーザー登録後の遷移先を変更する際の注意点

Posted at

前回、deviseでのログイン後のページ遷移先を指定する際の個人的な注意点を書きました。

ここではヘルパーメソッド実装における大前提を見逃していた、という単純に私の無知ゆえの失敗だったわけですが、今度は「ユーザー登録後のページ遷移ができない」という謎に直面したので、その解決策をメモしておきます。

deviseにおけるリダイレクト先の設定

deviseを導入後、リダイレクト先を設定するには、コントローラにてコメントアウトされている専用のメソッドを有効化してURLヘルパーを記載する、というのがこれまで私が把握していた流れ。

そこで今回も、登録時のコントローラである「resistrations_controller.rb」に以下のように変更を加えていきました。

resistrations_controller.rb
  # 変更前
  # The path used after sign up.
  # def after_sign_up_path_for(resource)
  #   super(resource)
  # end

  # 変更後
  # The path used after sign up.
  def after_sign_up_path_for(resource)
    user_path(resource)
  end

しかし、変更後にユーザー登録をしてみても、ルートページに飛んでしまい、意図したページ(ユーザー詳細ページ)に遷移しませんでした。

ルーティングの設定が必要

調べてみると、なんとdevise_forのルーティングに追加で設定が必要とのこと。

最終的には以下の通り変更しました。

routes.rb

# 変更前
Rails.application.routes.draw do
  devise_for :users
  resources :users
  get 'users/' => 'users#index'
  get 'users/:id' => 'users#show'
end

# 変更後
Rails.application.routes.draw do
  devise_for :users, controllers: {
    registrations: 'users/registrations'
  }
  resources :users
  get 'users/' => 'users#index'
  get 'users/:id' => 'users#show'
end

devise_forでusersモデルにcontrollersの設定を追加しています。

こうすることで、usersモデルに対して、users/resistrations内のコントローラが割り当てられるようになるのだとか。

デフォルトでは「devise/⚪︎⚪︎」のコントローラを使ってしまうみたいですね。コメントアウトを外せば有効化できるのだと思っていました、、、

一方で、ログイン後のリダイレクトを指定する場合には、after_sign_in_path_forメソッドを「application_controller.rb」内に記述していたので、この設定が不要だった、ということみたいです。

devise内の仕組みはまだ全然把握できていませんが、ちょっとだけ仕様がわかってきたような気がします。

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?