2012-08-02 71 views
2

我有以下途径:告诉嵌套资源使用特定的控制器

namespace :admin do 
    scope 'foo', module: 'foo' do 
    resources :bar 
    resources :baz 
    end 

    scope 'lorem', module: 'lorem' do 
    resources :ipsum 
    resources :baz 
    end 
end 

现在,我想在“巴兹”资源使用相同的控制器(在controllers/admin/baz_controller.rb找到,但我不能确定如何告诉Rails我想在不同的命名空间,但使用相同的控制器,这些资源

回答

0

也许这可以帮到你。

namespace :admin do 
    resources :baz, path: 'foo/baz', as: 'foo_baz' 
    scope 'foo', module: 'foo' do 
    resources :bar 
    end 

    resources :baz, path: 'lorem/baz', as: 'lorem_baz' 
    scope 'lorem', module: 'lorem' do 
    resources :ipsum 
    end 
end 

请注意,您需要使用as:才能生成路径。但他们可以是别的东西。

不知道你是否还需要添加模块参数,但你有想法。

+0

是的,我希望能有比这更好的东西,不止一个共享控制器,它会变得非常难看 – 2012-08-08 13:56:55

0

它应该是这个样子:

scope 'lorem', module: 'lorem' do 
    resources :ipsum 
    resources :baz, :module=>'foo', :controller=>'baz' 
end 

这取决于该模块的控制器上

查看Rails guidesRails API了解更多信息。

+0

当我使用这个,我得到以下路线: 'lorem/Foo :: Baz#new'例如新的动作。而不是'foo/baz#new' – 2012-08-02 11:03:08

+0

我更新了我的答案。如果这不起作用,我想你是不走运的。 – Wukerplank 2012-08-02 12:28:38

+0

不,这仍然不起作用。我已经返回了'admin/lorem/admin/baz'(记得我想在'admin'命名空间下的baz控制器)。无论如何感谢 – 2012-08-02 12:34:21

0

我认为在没有混乱路线的情况下做到这一点的唯一方法是创建一个新的控制器,该控制器可以继承旧控制器。

class Foo::BazController < Admin::BazController 
end