2013-01-23 49 views
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 

或是单独声明neccessary。我知道,如果他们最终有不同的资源,他们将不得不分隔符,但如果我可以声明共享的那些话,我可以做这样的事情:而在航线使用的命名空间,甚至

#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 

回答

1

是单独的声明是必要的如果使用公共资源。

+0

,你可以参考,http://stackoverflow.com/questions/6896339 /导轨-3-不同名称空间内嵌套的资源 –

0

你不能这样做 - 命名空间方法中的第二个选项是散列。命名空间方法只是路径,模块和as的快捷方式。它不会在一次调用中为两个名称空间执行此操作。

7

我在查找类似答案时遇到此票。我之前解决了这个问题是这样的:

%w[captures displays].each do |space| 
    namespace space do 
    resources :ones 
    resources :twos 
    resources :threes 
    # ... 
    end 
end 
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