我想:
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
的{{1}}。并且有几个名称空间但我希望Models
保留在lowerst中。
答案 0 :(得分: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-routing或http://api.rubyonrails.org/classes/ActionDispatch/Routing.html)
答案 1 :(得分:0)
尝试怎么样:
namespace :admin do
scope :module => "site" do
resources :items do
resources :assets
end
end
end
告诉我这对你有什么影响
答案 2 :(得分: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 看起来像我喜欢。
此方法的唯一问题是路由的名称正在丢失 site 前缀:
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 对我来说比路由名称更重要。