0

我正在构建一个管理控制面板(尝试;))。

我一直在研究 Ruby on Rails 中的后端管理,并按照建议尝试让 Admin::AdminController 检查管理员并设置布局等。

但我也试图在其中设置一个路由,将 /admin 路由到 /admin/dash

根据我对阅读http://guides.rubyonrails.org/routing.html#controller-namespaces-and-routing的理解,特别是第 2.6 节,

管理员::管理员控制器

告诉 Rails Admin 是名称空间,AdminController 是控制器,它是 ApplicationController 的子类(扩展?,接口的实现?)。这意味着控制器应该位于 app/controllers/admin/ 中并被称为 admin_controller.rb。

但我想要的是

管理员控制器

我收到如下错误:

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 < ApplicationController。

编辑:也许这是我对路由的理解。例子:

namespace :admin do
  get "/dash"

对比

namespace :admin do
  match "/dash" to "admin#dash"

对比

namespace...
  match "/dash" to "#dash"

第一个使我可以通过控制器显示破折号,即管理员/破折号将由

AdminController < ApplicationControler
  def dash
  end

第二个路由 admin/admin/dash 到 admin/dash 吗?

TL/DR:我认为我的困惑来自语法或我对 RESTful 实践的理解不足,甚至可能是 ruby​​ 中的类/对象继承。

感谢您帮助这个 n00b。:)

附带问题:我可以将我的代码更改为最小化,直到有人像剧透一样打开它,这样如果我找到更多信息并添加它就不会拥挤?

4

2 回答 2

3

我认为你最初的方法是正确的,但你需要稍微改变一下。

1)在命名空间内插入 /admin => /admin/dash (恕我直言,最好重定向它)

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

于 2012-07-05T02:34:41.577 回答
0

您想要的是路由中的“范围”。

scope "/admin" do
  resources :articles
end

这会将 /admin/articles 路由到 ArticlesController(没有 Admin:: 前缀)

文档几乎涵盖了所有可能的情况。 http://edgeguides.rubyonrails.org/routing.html

于 2012-07-05T02:32:25.710 回答