命名空间,静态页面和继承的控制器,什么文件在哪些文件夹中?

时间:2012-07-05 02:10:16

标签: ruby-on-rails inheritance namespaces controller routes

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

我一直在关注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。 :)

附带问题:我可以将我的代码更改为最小化,直到有人像扰流板一样打开它,这样如果我找到更多信息并添加它就不会占用一些东西吗?

2 个答案:

答案 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