1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rails8でのDevise導入時にハマった点と解消方法

Posted at

はじめに

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
    
    • サーバーを再起動

補足

  • 上記の手順を行った後に、上手く解消せず、サーバーを再起動したら機能したので、もしかしたら上記のようなことをやらずともサーバーを再起動したらエラーが出なくなったのかも…というきもします。

参考

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?