Rails で Devise のコントローラーをカスタマイズ

スポンサーリンク

Devise でコントローラーをカスタマイズする場合、認証用ユーザーのモデルが User であれば、app/controllers/users ディレクトリ以下に以下のファイルを作成します。

app/controllers/users/sessions_controller.rb
app/controllers/users/registrations_controller.rb
app/controllers/users/passwords_controller.rb

— 環境 —
rails 5.0.0.1
devise 4.2.0

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

Devise コントローラーを継承してカスタマイズ

カスタマイズするには、Devise::SessionsController, Devise::RegistrationsController, Devise::PasswordsController を継承したクラスを作成して、各メソッドをオーバーライドする。オーバーライドするメソッドは、ルーティングを確認すると分かります。

コントローラーを作成。

app/controllers/users/sessions_controller.rb

new, create, destroy をオーバーライド。

app/controllers/users/registrations_controller.rb

cancel, create, new, edit, update, destroy をオーバーライド。

app/controllers/users/passwords_controller.rb

create, new, edit, update をオーバーライド。

将来のカスタマイズのためにも、このように Devise コントローラーを継承して、カスタマイズ用コントローラーを作成しておいたほうが良いかもです。

ルーティング設定

続いて、ルーティングを設定します。

config/routes.rb

ルーティングを確認。

Controller#Action が devise/.. から users/.. に変更されて、ルーティングが少しすっきりしました。

自力でテスト用にルーティングを書いてみたらURLヘルパーメソッドが動かなかったりしたので、やはり Devise でのルーティングには、devise_for メソッドを使う必要がある模様(ミスってる可能性ありますけど)。

Devise で devise_for メソッドによるルーティングを確認 | EasyRamble

ということで、これ以上ルーティングについて深追いはせずに、カスタマイズ用のコントローラーを継承して以下のルーティングで進めようと思います。

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

Leave Your Message!