我是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/页,并且在输入正确的管理员凭据之后,我应该重定向到控制器的索引方法/admin/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/时,我得到了错误提示
答案 0 :(得分:1)
您的问题是您没有为/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