我正在尝试使用“友好”永久链接结构在我的Rails 3.2应用程序中路由内容(如Adam Darowski的博客文章1中所述)。我找到了一些描述如何在单个“页面”或“类别”控制器中执行此操作的答案,但理想情况下,我希望应用程序在“部分”URL的情况下路由到最具体的控制器。
http://example.com / shows / :genre / :series / :season / :episode
因此,例如:/shows/entertainment/the-survivors/01/01
将路由到Episodes控制器(播放特定系列的第1季第1集),/shows/entertainment/the-survivors/
将路由到系列控制器(列出该剧中的所有剧集)系列)。等等。
我听说过嵌套路由应该不超过一级的规则,这似乎是一个糟糕的解决方案(标准嵌套路由“污染”带有控制器名称和ID的URL,如/genres/entertainment/shows/the-survivors/seasons/1/episodes/1
,我想避免)。
到目前为止,我能够弄清楚的最佳解决方案只是我的routes.rb文件中的一系列越来越具体的match
规则,这些规则指向每个控制器,因为URL越来越具体。< / p>
在Rails中有更好的方法吗?
答案 0 :(得分:1)
我建议使用像friendly_id这样友好的网址宝石。除非专门为路由添加内容,否则我将删除您网址的“显示”部分。然后你可以制作像:
这样的网址/entertainment/the-survivors/s01e01
然后通过slug找到每个系列和剧集(分别是'the-survivors'和's01e01')。
我认为无论哪种方式,您都必须在路线文件中创建自定义路线,就像您在问题中提到的那样,但是我没有看到问题。
但我不同意你创建两个控制器的想法。在你的问题中你提到它
将路由到系列控制器(列出该系列中的所有剧集)
用您的语言说“列出所有剧集”。剧集是资源,所以如果你真的是RESTful,那么“系列”页面就应该是index
的{{1}}动作,每集都是{{1} } EpisodesController
的行动。