如何在命名空间和根路径的路由中有一个资源 - Rails 4

时间:2015-07-30 13:53:41

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4

我正在命名空间中制作自定义管理面板" admin"。

我有资源"课程"在该命名空间内。

但我还想要一条通往"课程的路线。那不在那个命名空间中:

例如:BOTH localhost:3000/admin/courseslocalhost:3000/courses

如果这需要不同的控制器,那就没关系。

我担心的是,如果我有两条相同路线的资源,它就不会真的干。

namespace admin do
   resources :courses
end

只是

resources :courses

有没有办法在命名空间和没有命名空间之间共享一个资源,或者是上面的示例?

2 个答案:

答案 0 :(得分:5)

我不确定我明白你的意思,但是

namespace :something实际上是scope :something, module: :something, as: :something

的简写
  • scope :something会将/something/添加为网址前缀
  • scope module: :something会将/something添加为控制器前缀(控制器将在controlelrs/something/the_controller.rb下提取
  • scope as: :something会将something添加为路径助手的前缀

现在在你的路线中同时拥有它们是完全没法的

resources :courses
# Will generate "/courses/", "/courses/new", "/courses/1/edit", ...
# And will point to `controllers/courses_controller.rb`

namespace :admin do
  resources :courses
end
# Will generate "/admin/courses/", "/admin/courses/new", "/admin/courses/1/edit", ...
# And will point to `controllers/admin/courses_controller.rb`

这会回答你的问题吗?

答案 1 :(得分:5)

等等哦!还可以使用concerns

concern :shared_actions do
   resources :courses
   resources :something_else
end


namespace :admin do
   concerns :shared_actions
end
concerns :shared_actions # Will add it to the root namespace ^^

编辑:显然这是this guy也试图做的事情:D