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

时间:2016-01-14 05:34:23

标签: ruby-on-rails ruby-on-rails-4 routes nested-routes

我的路线发生冲突,我预计但是我无法弄清楚如何浅埋资源以获得我想要的结果。 (或者至少我认为浅层嵌套是需要做的事情)

我有这两个网址冲突

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。

2 个答案:

答案 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