0

我想:

url: /admin/site/items/:item_id/assets/index(.:format) 
controller: admin/assets#index

如果我以简单的方式声明路线:

namespace :admin do
  namespace :site do
    resources :items do
      resources :assets
    end
  end
end

我获得下一个路由/控制器连接:

url: /admin/site/items/:item_id/assets/index(.:format)
controller: admin/site/assets#index

如果我尝试明确地controller这样说明:

namespace :admin do
  namespace :site do
    resources :items do
      resources :assets, :controller => "admin/assets"
    end
  end
end

然后我得到这个:

url: /admin/site/items/:item_id/assets/index(.:format) 
controller: admin/site/admin/assets#index

我也尝试/像这样在控制器的路由中添加一个首字母

resources :assets, :controller => "/admin/assets"

但更糟糕的是:

url: /admin/site/items/:item_id/assets/index(.:format) 
controller: admin/site//admin/assets#index

我想要这种行为,因为我有一个AssetsController负责在我的应用程序中操作Assets不同的。Models并且有几个命名空间,但我希望AssetsController保留在最低的一个。

4

3 回答 3

1

我认为嵌套资源声明不可能实现您想要的。这是另一个尝试的选择:

namespace :admin do
  namespace :site do
    resources :items
  end

  scope "/site/items/:item_id" do
    resources :assets, :as => "site_item_assets"
  end
end

(参见http://guides.rubyonrails.org/routing.html#controller-namespaces-and-routinghttp://api.rubyonrails.org/classes/ActionDispatch/Routing.html

于 2012-09-18T14:00:42.297 回答
0

我找到了一种解决方法,将路由分成两个块,一个用于主资源的路由,items另一个用于嵌套资源assets

# routes for the main resource
namespace :admin do
  namespace :site do
    resources :items
  end
end

# routes for the nested resource
namespace :admin do
  resources :items, :only => [], :path => "/site/items"
    resources :assets
  end
end

看看我如何通过:only => []以避免在第二个块中创建默认路由。

通过:path选项我获得的url看起来像我喜欢的。

这种方法的唯一问题是路由名称丢失了站点前缀:

admin_site_item_assets => admin_item_assets

我曾尝试:as => "site_items"在资源中使用该选项,items但这会更改url本身:

/admin/site/items/:item_id/assets(.:format) => /admin/site/items/:site_item_id/assets(.:format)

而且url对我来说比路由名称更重要。

于 2012-09-18T13:32:54.417 回答
0

试试呢:

namespace :admin do
  scope :module => "site" do
    resources :items do
      resources :assets
    end
  end
end

告诉我这对你有什么影响

于 2012-09-18T11:34:02.633 回答