Rails Devise でユーザーがプロフィール情報を更新後に元のページにリダイレクトさせる

スポンサーリンク

Devise では、ユーザーがプロフィール情報(アカウント情報)を更新すると、デフォルトでは root_path へとリダイレクトされます。プロフィール情報編集ページのパスは、edit_user_registration_path(/users/edit)。これを、元のプロフィール情報編集ページにリダイレクトさせる設定を行います。

— 環境 —
rails 5.0.0.1
devise 4.2.0

【追記 2016/11/22】
Rails 5 + Devise 4 の環境でも同様の内容で実装できます。
【追記ここまで】

— 記事初回公開時の環境 —
rails-4.0.1
rspec-rails-2.14.0
capybara-2.2.0
devise-3.2.2
omniauth-1.1.4

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

テスト(RequestSpec)でリダイレクト先を確認

まず最初にテストを書く。基本的にユーザーの認証・認可やユーザーモデルの変更など、大事そうな部分はテストを一生懸命書いてます。今回はユーザー情報変更サブミット後のリダイレクト先の変更ですが、簡単に書けたので先にテスト書きました。

spec/requests/user_registration_pages_spec.rb

こんな感じで、ユーザーが”変更を保存”した後に、リダイレクト先のページが”アカウント情報編集”というタイトルを持つことを確認して、元のアカウント情報編集ページにリダイレクトされることをチェックしました。

テストを実行し、この時点ではテストが通らないことを確認。

RegistrationsController で after_update_path_for をオーバーライド

続いて、カスタマイズ用に継承した RegistrationsController で、after_update_path_for メソッドをオーバーライド。

app/controllers/users/registrations_controller.rb

after_update_path_for のリダイレクト先を edit_user_registration_path に設定しています。

最後に routing 確認

:registrations => “users/registrations” のルーティングを設定しておく。

以上の実装でテストが通り、ブラウザ上での動作確認でも元のユーザー情報編集ページヘとリダイレクトされるようになりました。

スポンサーリンク
パーフェクト Ruby on Rails は、最近読んだ Rails 本の中では一番役に立った本です。Chef や Capistrano など Rails と共によく使用される技術にも触れてあります。Ruby on Rails 4 アプリケーションプログラミングは、入門的な内容で Rails の機能全体を網羅されています。
 
スポンサーリンク

Leave Your Message!