ruby-on-rails - Ruby on Rails 分离管理文件夹、控制器和布局
问题描述
我是 Ruby on Rails 的新手。我希望管理部分具有以下结构。
app/controller/admin/admin_controller.rb 和 app/controller/admin/ 文件夹下的所有其他管理部分控制器
app/views/layout/admin/admin.html.erb 为管理部分保留单独的 html 布局
同时我想使用 Devise Gem 进行管理员和前端用户身份验证。
我执行了为管理员用户创建视图、模型和控制器的rails g devise:views admin
命令rails generate devise Admin
。rails 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/然后我得到以下错误
解决方案
您的问题是您没有为/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
推荐阅读
- python - 使用 Python 或 pandas 使用数据集替换另一个数据集中的值
- java - OVERPASS API 中的缩放级别和经纬度之间有什么关系吗?
- javascript - 在 JS 派生类的构造函数中使用 super() 感到困惑
- java - Java 独占全屏模式不断抛出“无效显示模式”
- c# - 重用具有 DbContext 层次结构的 ASP.NET 控制器和服务
- oracle - 如何在从另一个用户 Oracle Database 19c 创建“SYS.CDEF$”视图时修复“ORA-01031”
- android - 如何修复 React Native 中的内存泄漏?
- python - Python:Lambda 表达式
- node.js - Node.js 中 Mac 上的应用程序支持路径
- haskell - 霍夫曼树解码