0

如果我有两个命名空间,并且它们使用相同的资源,我可以执行以下操作吗?

namespace :captures, :displays do
  resources :ones
  resources :twos
  resources :threes
  # ...
end

代替:

namespace :captures do
  resources :ones
  resources :twos
  resources :threes
  # ...
end

namespace :displays do
  resources :ones
  resources :twos
  resources :threes
  # ...
end

或者是否需要单独声明。我知道如果他们最终拥有不同的资源,他们将不得不分开,但如果我可以声明共享的资源,那么我可以做这样的事情:

#shared
namespace :captures, :displays do
  resources :ones
  resources :twos
  resources :threes
  # ...
end

#individual
namespace :captures do
  resources :fours
  resources :fives
  resources :sixes
end
namespace :displays do
  resources :sevens
  resources :eights
  resources :nines
end
4

4 回答 4

10

我在寻找类似答案时遇到了这张票。我以前这样解决过这个问题:

%w[captures displays].each do |space|
  namespace space do
    resources :ones
    resources :twos
    resources :threes
    # ...
  end
end
于 2013-11-21T02:50:00.967 回答
1

是的,即使使用公共资源,在路由中使用命名空间时也需要单独声明。

于 2013-01-23T06:13:36.810 回答
0

你不能这样做——命名空间方法中的第二个选项是哈希。命名空间方法只是 :path、module 和 :as 的快捷方式。它不会在一次调用中对两个命名空间执行此操作。

于 2013-01-23T06:16:43.550 回答
0

您还可以将 proc 作为块传递给 namepace 方法,如下所示:

duplicate_routes = -> do
  resources :ones
  resources :twos
end

namespace :captures, &duplicate_routes
namespace :displays, &duplicate_routes
duplicate_routes.call # use the same routes in root namespace
于 2015-08-30T14:01:53.593 回答