无法弄清楚如何使用浅嵌套设置此路由



我的路线发生了冲突,这是我预料到的,但我不知道如何浅层嵌套资源以获得我想要的结果。(或者至少我认为需要做浅嵌套)

我有这两个网址冲突

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

最新更新