Ruby on rails 命名空间、静态页面和继承的控制器,哪些文件夹中有哪些文件?

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/中,并被称为

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

我一直在看,并建议我试图使管理员::管理员控制器检查管理和设置布局等

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

根据我对阅读的理解,特别是第2.6节

Admin::AdminController 告诉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
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