Ruby on rails 命名空间、静态页面和继承的控制器,哪些文件夹中有哪些文件?
我正在构建一个管理控制面板(尝试;)) 我一直在看,并建议我试图使管理员::管理员控制器检查管理和设置布局等 但我也尝试在其中设置一个路由,将/admin路由到/admin/dash 根据我对阅读的理解,特别是第2.6节 Admin::AdminController 告诉rails Admin是名称空间,AdminController是控制器,它是ApplicationController的子类(扩展?、接口实现?)。这意味着控制器应该位于app/controllers/admin/中,并被称为admin_controller.rb 但我想要的是 管理员控制器 我会遇到如下错误:Ruby on rails 命名空间、静态页面和继承的控制器,哪些文件夹中有哪些文件?,ruby-on-rails,inheritance,namespaces,controller,routes,Ruby On Rails,Inheritance,Namespaces,Controller,Routes,我正在构建一个管理控制面板(尝试;)) 我一直在看,并建议我试图使管理员::管理员控制器检查管理和设置布局等 但我也尝试在其中设置一个路由,将/admin路由到/admin/dash 根据我对阅读的理解,特别是第2.6节 Admin::AdminController 告诉rails Admin是名称空间,AdminController是控制器,它是ApplicationController的子类(扩展?、接口实现?)。这意味着控制器应该位于app/controllers/admin/中,并被称为
uninitialized constant Admin::Controller
我的路线代码:
match :admin, :to => 'admin/admin#dash'
namespace :admin do
# Directs to /admin/resources/*
match '/dash', to: '#dash'
resources :users, :pictures
end
我已将控制器放入app/controllers/admin、app/controllers以及与的组合中
class Admin::AdminController < ApplicationController
before_filter :admin_user
# / ** STATIC ADMIN PAGES ** /
def dash
end
end
vs
vs
第一个使我可以通过控制器显示破折号,即管理员/破折号将由
AdminController < ApplicationControler
def dash
end
AdminController
第二个路径是否将admin/admin/dash路由到admin/dash
TL/DR:
我认为我的困惑来自语法或者我对RESTful实践的理解不足,甚至可能是ruby中的类/对象继承
感谢您帮助n00b解决此问题。:)
旁白:我能把我的代码修改为最小化,直到有人像破坏者一样打开它,这样当我找到更多信息并添加它时,它就不会把事情挤得水泄不通吗 您想要的是路由中的“范围”
scope "/admin" do
resources :articles
end
将/admin/articles路由到ArticlesController(不带admin::前缀)
文档几乎涵盖了所有可能的情况。
您想要的是路由中的“范围”
scope "/admin" do
resources :articles
end
将/admin/articles路由到ArticlesController(不带admin::前缀)
文档几乎涵盖了所有可能的情况。
我认为您最初的方法是正确的,但您需要稍微改变一下 1) 在名称空间中插入/admin=>/admin/dash(imho,最好重定向它) 或 2) 您不能将“/dash”与“#dash”匹配,因为您不在资源块中,您在命名空间块中,因此它没有隐含的控制器
namespace :admin do
match 'dash', to: 'admin#dash'
# This will go to Admin::AdminController#dash
# (first Admin because of the namespace,
# and the second because of the controller name)
end
希望它能起作用:我认为你最初的方法是正确的,但你需要稍微改变一下 1) 在名称空间中插入/admin=>/admin/dash(imho,最好重定向它) 或 2) 您不能将“/dash”与“#dash”匹配,因为您不在资源块中,您在命名空间块中,因此它没有隐含的控制器
namespace :admin do
match 'dash', to: 'admin#dash'
# This will go to Admin::AdminController#dash
# (first Admin because of the namespace,
# and the second because of the controller name)
end
希望它能起作用:D如果你要进行此批准,我想你需要从AdminControlleri中删除Admin::namespace如果你要进行此批准,我想你需要从AdminControllera中删除Admin::namespace,这是对每个名称功能的一个很好的解释!为什么你喜欢重定向?我不喜欢两个URL有相同的功能,但这可能是因为我来自搜索引擎优化的世界。两种解决方案(重定向或不重定向)都一样好。如果我只选择一个会更好吗?您需要选择一个:)如果您使用重定向(),当您转到
example.com/admin
,它将重定向到example.com/admin/dash
,如果您使用匹配“/”,example.com/admin
将显示与example.com/admin/dash
相同的内容,谢谢!最后我重定向到/admin,谢谢你的帮助:)太棒了,这是对每个名字的一个很好的解释!为什么你喜欢重定向?我不喜欢两个URL有相同的功能,但这可能是因为我来自搜索引擎优化的世界。两种解决方案(重定向或不重定向)都一样好。如果我只选择一个会更好吗?您需要选择一个:)如果您使用重定向(),当您转到example.com/admin
,它将重定向到example.com/admin/dash
,如果您使用匹配“/”,example.com/admin
将显示与example.com/admin/dash
相同的内容,谢谢!我最后只是重定向到/admin,谢谢你的帮助:)
match 'admin' => redirect('admin/dash')
namespace :admin do
match '/', to: 'admin#dash'
end
namespace :admin do
match 'dash', to: 'admin#dash'
# This will go to Admin::AdminController#dash
# (first Admin because of the namespace,
# and the second because of the controller name)
end