はじめに
Rails8でDeviseを導入したところ、少しハマったので、解消方法を残します。
補足に記載しましたが、もしかしたら下記を全て対応しなくてもサーバーを再起動するだけで直ったのかもしれません…
やりたいこと
- Rails8でDeviseを使いたい
やったこと
-
公式ドキュメントとインストール後のメッセージに沿って対応
bin/rails generate devise:install # ルートページの設定と動作確認 # flashメッセージ表示の設定 bin/rails g devise:views bin/rails g devise User bin/rails db:migrate
- ドキュメントなど
-
メッセージ
Depending on your application's configuration some manual setup may be required: 1. Ensure you have defined default url options in your environments files. Here is an example of default_url_options appropriate for a development environment in config/environments/development.rb: config.action_mailer.default_url_options = { host: 'localhost', port: 3000 } In production, :host should be set to the actual host of your application. * Required for all applications. * 2. Ensure you have defined root_url to *something* in your config/routes.rb. For example: root to: "home#index" * Not required for API-only Applications * 3. Ensure you have flash messages in app/views/layouts/application.html.erb. For example: <p class="notice"><%= notice %></p> <p class="alert"><%= alert %></p> * Not required for API-only Applications * 4. You can copy Devise views (for customization) to your app by running: rails g devise:views * Not required *
- ドキュメントなど
エラー内容
-
上記のやったこと対応後にサインインページにアクセス
ActionView::Template::Error (undefined method 'session_path' for an instance of # <Class:0x00007fd4d318e890>) Caused by: NoMethodError (undefined method 'session_path' for an instance of #<Class:0x00007fd4d318e890>)
-
routes.rbを以下のように修正した後にサインインページにアクセス
# routes.rb devise_for :users, controllers: { sessions: "users/sessions" }
Routing Error uninitialized constant Users
解決策
users_controllersの作成
-
app/controllers
にusers_controllersがあるかを確認-
作られていない…!
-
作成時のログ、確かに作られていない
invoke active_record create db/migrate/20250217023827_devise_create_users.rb create app/models/user.rb invoke test_unit create test/models/user_test.rb create test/fixtures/users.yml insert app/models/user.rb route devise_for :users
-
-
controllerを作成する
rails generate devise:controllers users
ビューの再作成
-
再度サインインページにアクセスするとエラー
NoMethodError in Users::Sessions#new
- session_path が認識されていない
-
原因
-
bin/rails g devise:views
で作成したビューだと上手く読み込まれない
-
-
解決策
- ビューを削除
bin/rails d devise:views
- カスタムビューとして再作成
bin/rails g devise:views users
-
config/initializers/devise.rb
を修正
config.scoped_views = true # デフォルトはfalse
- サーバーを再起動
補足
- 上記の手順を行った後に、上手く解消せず、サーバーを再起動したら機能したので、もしかしたら上記のようなことをやらずともサーバーを再起動したらエラーが出なくなったのかも…というきもします。