首页 > 解决方案 > Ruby on Rails 分离管理文件夹、控制器和布局

问题描述

我是 Ruby on Rails 的新手。我希望管理部分具有以下结构。

  1. app/controller/admin/admin_controller.rb 和 app/controller/admin/ 文件夹下的所有其他管理部分控制器

  2. app/views/layout/admin/admin.html.erb 为管理部分保留单独的 html 布局

同时我想使用 Devise Gem 进行管理员和前端用户身份验证。

我执行了为管理员用户创建视图、模型和控制器的rails g devise:views admin命令rails generate devise Adminrails g controller admin/home index现在我需要添加哪些路由和其他设置,以便 ruby​​ 可以理解,如果我输入http://localhost:3000/admin/那么我应该被重定向到http://localhost:3000/admins/sign_in/页面和之后输入正确的管理员凭据,我应该重定向到控制器/管理员/home_controller.rb 的索引方法

是否也可以保持 Devise 管理视图的单一约定,例如admin/sign_in而不是admins/sign_in

我进行了很多搜索,但无法获得相关帮助。请提供实现上述步骤的步骤。

提前致谢。

这就是路由文件的样子

Rails.application.routes.draw do
  namespace :admin do
    get 'home/index'
  end

  devise_for :admins

  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
  root to: "home#index"
end

当我输入http://localhost:3000/admin/然后我得到以下错误

在此处输入图像描述

标签: ruby-on-railslayoutdevisecontrollers

解决方案


您的问题是您没有为/admin.

我在其中一个应用程序中有相同的 URL 约定路由,routes.rb如下所示:

Rails.application.routes.draw do

  # Admin part
  devise_for :admins, path: '/admin'

  scope module: :admin, path: '/admin', as: 'admin' do
    root to: 'home#index'
  end

  # Redirect app root to client part
  root to: redirect(path: '/panel', status: 301)

  # Client part
  devise_for :clients, path: '/panel'

  scope module: :panel, path: '/panel', as: 'panel' do
    ...
  end
end

推荐阅读