我的路线发生冲突,我预计但是我无法弄清楚如何浅埋资源以获得我想要的结果。 (或者至少我认为浅层嵌套是需要做的事情)
我有这两个网址冲突
category_item show page
guides/:guide_id/categories/:category_id/:id
与类别编辑,新等页面冲突。页面
/guides/:guide_id/categories/:id/edit
我使用友好的id宝石,所以它认为编辑'是:id
我想将category_item网址结构更改为
guides/:guide_id/:category_id/:id
(减去category_item的/ categories)
这意味着向大多数人显示并由搜索机器人拾取的页面具有更短的更漂亮的网址,并且它会阻止网址发生冲突。
我不能让它发生。
这是路线
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的/ categories。
答案 0 :(得分:0)
你可以像这样为它做一个单独的路线:
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
答案 1 :(得分:0)
有一种更好的方法:
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