我的路线发生了冲突,这是我预料到的,但我不知道如何浅层嵌套资源以获得我想要的结果。(或者至少我认为需要做浅嵌套)
我有这两个网址冲突
category_item显示页面
guides/:guide_id/categories/:category_id/:id
与类别编辑、新等发生冲突。页面
/guides/:guide_id/categories/:id/edit
我正在使用友好的id gem,所以它认为"编辑"是:id
我想将category_item url结构更改为
guides/:guide_id/:category_id/:id
(减去category_item的/categies)
这意味着向大多数人显示并被搜索机器人获取的页面具有更短、更漂亮的URL,并且可以防止URL冲突。
我就是不太想让它发生。
这是的路线
resources :guides do
resources :categories, only: [:new, :create, :edit, :update] do
resources :category_items, path: "", shallow: true, only: [:update, :new, :create, :edit, :show]
resources :category_item_keys, path: "keys", only: [:update, :new, :create] do
get :edit, on: :collection #-> url.com/guides/:guide_id/:category_id/keys/edit
end
end
end
如果可能的话,我只希望删除category_items的/categies。
您可以为它制作一个单独的路由,如下所示:
resources :guides do
resources :categories, only: [:new, :create, :edit, :update] do
resources :category_items, path: "", only: [:update, :new, :create, :edit, :show]
resources :category_item_keys, path: "keys", only: [:update, :new, :create]
end
end
get 'guides/:guide_id/:category_id/keys/edit', to: 'controllerName#actionName', as: :your_custom_path_name
有一种更好的方法:
resources :guides do
resources :categories, except: [:delete] do
resources :items, controller: 'category_items', except: [:delete]
resources :item_keys, controller: 'category_item_keys', only: [:update, :new, :create] do
get :edit, to: 'category_item_keys#edit'
end
end
end