我正在构建一个管理控制面板(尝试;))。
我一直在关注Backend administration in Ruby on Rails并且正如我所建议的那样,我正在尝试使用Admin :: AdminController检查管理员并设置布局等。
但我也试图在其中设置路由/ admin到/ admin / dash
的路由根据我对阅读http://guides.rubyonrails.org/routing.html#controller-namespaces-and-routing的理解,特别是第2.6节,
管理:: AdminController
告诉rails,Admin是名称空间,AdminController是控制器,它是ApplicationController的子类(扩展名?,接口的实现?)。这意味着控制器应该存在于app / controllers / admin /中并被称为admin_controller.rb。
但我想要的是
AdminController
我收到的错误如下:
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
或类AdminController&lt; ApplicationController中。
编辑:也许这是我对路由的理解。 示例:
namespace :admin do
get "/dash"
VS
namespace :admin do
match "/dash" to "admin#dash"
VS。
namespace...
match "/dash" to "#dash"
第一个使它可以通过控制器显示短划线,即admin / dash将由
控制AdminController < ApplicationControler
def dash
end
第二个将admin / admin / dash路由到admin / dash吗?
TL / DR: 我认为我的困惑来自语法或我对RESTful实践的不理解,甚至可能是ruby中的类/对象继承。
感谢您帮助这个n00b。 :)
附带问题:我可以将我的代码更改为最小化,直到有人像扰流板一样打开它,这样如果我找到更多信息并添加它就不会占用一些东西吗?
答案 0 :(得分:3)
我认为您最初的方法是正确的,但您需要稍微更改一下。
1)插入/ admin =&gt;命名空间内的/ admin / dash(imho,最好重定向它)
match 'admin' => redirect('admin/dash')
或
namespace :admin do
match '/', to: 'admin#dash'
end
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
答案 1 :(得分:0)
你想要的是路由中的“范围”。
scope "/admin" do
resources :articles
end
将路由/ admin / articles路由到ArticlesController(不带Admin ::前缀)
文档几乎涵盖了所有可能的案例。 http://edgeguides.rubyonrails.org/routing.html