【问题标题】:Devise + Administrate: ActionController::RoutingError - uninitialized constant Admin::SessionsController:设计 + 管理:ActionController::RoutingError - 未初始化的常量 Admin::SessionsController:
【发布时间】:2021-02-13 15:02:05
【问题描述】:

我创建了一个 rails (6.0.3) 应用程序并添加了 thoughtbot/administratedevise。 我有一个供普通用户使用的User 模型和另一个AdminUser。我想将两种类型的用户分开。两者都是用设计生成器创建的

$ rails generate devise User
$ rails generate devise AdminUser

我在管理和设计范围的路由配置方面遇到问题。

Rails.application.routes.draw do
  devise_for :users
  devise_scope :user do
    get 'log-in', to: 'devise/sessions#new'
    get 'sign-up', to: 'devise/registrations#new'
    delete 'log-out', to: 'devise/sessions#destroy'
    get 'reset-password', to: 'devise/passwords#new'
  end

  root 'pages#index'

  get '/dashboard', to: 'pages#dashboard'

  namespace :admin do
    devise_for :admin_users

    resources :users
    resources :groups

    root to: 'users#index'
  end
end

我想我错过了一些东西,因为当我转到 localhost:3000/admin 并重定向到 http://localhost:3000/admin/admin_users/sign_in 时它会引发异常。 这里例外:

Started GET "/admin" for ::1 at 2021-02-13 11:58:13 -0300
Processing by Admin::UsersController#index as HTML
Completed 401 Unauthorized in 2ms (ActiveRecord: 0.0ms | Allocations: 207)


Started GET "/admin/admin_users/sign_in" for ::1 at 2021-02-13 11:58:13 -0300

ActionController::RoutingError - uninitialized constant Admin::SessionsController:

Started POST "/__better_errors/6ee21cb1da542538/variables" for ::1 at 2021-02-13 11:58:13 -0300

管理应用程序控制器如下所示:

module Admin
  class ApplicationController < Administrate::ApplicationController
    before_action :authenticate_admin_user!

    protected

    def authenticate_admin_user!
      authenticate_admin_admin_user!
    end
  end
end

LMK 如果我错过了一些有用的东西。 提前致谢

【问题讨论】:

  • 错误告诉你你没有定义你的 'admin/sessions_controller.rb' 文件,因为你正在使用devise_for :admin_users,你正在使用与普通用户不同的会话,所以你必须也定义管理员用户控制器。
  • 哦!我刚刚定义了从设计会话控制器扩展的会话控制器,它可以工作! SessionsController &lt; Devise::SessionsController。惊人的!谢谢@KamalPanhwar!
  • 请接受答案,投票将不胜感激。

标签: ruby-on-rails ruby devise administrate


【解决方案1】:

错误告诉您必须定义控制器。

admin/session_controller.rb

因此,当您使用与普通用户不同的会话时,创建一个从设计会话扩展的控制器,因此您也必须定义管理员用户控制器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 2013-08-25
    • 2016-01-16
    • 2016-01-19
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多