为Devise对象创建根和路由

时间:2019-01-31 21:15:16

标签: ruby-on-rails devise

我已经用Devise gem创建了一个Admin模型。现在,使用Devise控制器生成器,我有一个app/controllers/admins文件夹,其中包含我选择时可以修改的所有库存控制器,例如sessions_controllerpasswords_controller等。

但是,我不知道如何获得Admin控制器和简单的admin路由,例如admin_pathnew_admin_path

这是我的rake routes | grep admin

               new_admin_session GET      /admin/sign_in(.:format)                                                                 admins/sessions#new
                   admin_session POST     /admin/sign_in(.:format)                                                                 admins/sessions#create
           destroy_admin_session DELETE   /admin/sign_out(.:format)                                                                admins/sessions#destroy
              new_admin_password GET      /admin/password/new(.:format)                                                            devise/passwords#new
             edit_admin_password GET      /admin/password/edit(.:format)                                                           devise/passwords#edit
                  admin_password PATCH    /admin/password(.:format)                                                                devise/passwords#update
                                 PUT      /admin/password(.:format)                                                                devise/passwords#update
                                 POST     /admin/password(.:format)                                                                devise/passwords#create
                      admin_root GET      /admin(.:format)                                                                         admins/sessions#portal
                  admin_sign_out GET      /admin/sign_out(.:format)                                                                admin/sessions#destroy

这是我的routes.rb

的相关部分
  devise_for :admins, path: 'admin', controllers: { sessions: 'admins/sessions' }

  devise_scope :admin do
    get "/admin", to: 'admins/sessions#portal', as: 'admin_root'
    get "/admin/sign_out", to: 'admin/sessions#destroy', as: 'admin_sign_out'
  end

您会看到portal中目前有一个Admin::SessionsController方法,这是我目前的解决方法。我知道该页面的正确位置在AdminsController中,但我不知道如何进行设置。

admins: 'admins/admins'块中添加devise_for :admins, controllers:并没有给我任何新的路线。我尝试添加带有方法的AdminsController,但这也无济于事,尝试转到/admin/new/admins/new说没有路由匹配。

1 个答案:

答案 0 :(得分:0)

这就是我设置设备和名称空间的方式

# config/routes.rb
Rails.application.routes.draw do

  devise_for :admins, :controllers => { registrations:  'admins/registrations',
                                        sessions:       'admins/sessions',
                                        passwords:      'admins/passwords',
                                        confirmations:  'admins/confirmations'
  }
  authenticate :admin do
    namespace :admins do
      ...
      root 'dashboards#index'
    end
  end
  ...
  root 'pages#index'

现在控制器也很重要。

#app/controllers/admin_controller.rb
class AdminController < ApplicationController
  layout 'admins/application'
  before_filter :authenticate_admin!
end

我将它们设置为Devise控制器

#app/controllers/admins/sessions_controller.rb
class Admins::SessionsController < Devise::SessionsController
  layout 'admins/application'
  ...
end

对所有其他设备控制器重复此过程

让我知道这是否对您有帮助