【问题标题】:Rails - Polymorphic nested routesRails - 多态嵌套路由
【发布时间】:2018-07-26 03:03:01
【问题描述】:

我有一个多态模型“项目”设置,因此它可以属于细分、部门或地点。

我想要实现的路线是:

/category
/category/place
/category/place/item **
/category/place/division
/category/place/division/item **
/category/place/division/subdivision
/category/place/division/subdivision/item **

** 项目可以属于一个地方、部门或细分。永远不会超过一个。我正在使用 Friendly_ID 创建这些 slug url。

我的 routes.rb 文件目前如下所示:

resources :categories, path: ''
get ':category/:place', to: 'places#show', as: :place
get ':category/:place/:item', to: 'items#show', as: :item
get ':category/:place/:division', to: 'divisions#show', as: :division
get ':category/:place/:division/:subdivision', to: 'subdivisions#show', as: :subdivision

目前,我的路线中只能设置一个“项目”。如何通过地点、部门或细分访问“项目”?

【问题讨论】:

  • 我在问题中看不到任何 question。 :)
  • 啊,这是暗示的——我已经进行了编辑以使其更清晰。我的 routes.rb 文件目前只有一个“项目”路线,理想情况下,我希望通过 3 条可能的路线访问一个项目 - 因为它可以有 3 个可能的父项之一。

标签: ruby-on-rails routes polymorphism ruby-on-rails-5 friendly-url


【解决方案1】:

您可以将所有这些路线指向items#show,即

get ':category/:place/:item', to: 'items#show', as: :place_item
get ':category/:place/:division/:item', to: 'items#show', as: :division_item
get ':category/:place/:division/:subdivision/:item', to: 'items#show', as: :subdivision_item

【讨论】:

  • 这看起来很棒!我可以问一下 - 这是解决这个问题的正确方法吗?这如何也支持使用相同 html 布局的所有“项目”显示操作?
  • 这种方法是否也会阻止我的其他路线工作?特别是“division”和“subdivision”路由,因为应用程序会期待一个项目的 id,并接收一个部门的 id。
  • @Kobius 是的,这会与这些路线发生冲突。您将需要在两者之间添加静态部分以将它们分开。即,您可以将项目用作get ':category/:place/items/:item', to: 'items#show' 以将其与其他路线区分开来。
猜你喜欢
  • 1970-01-01
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多