2

我正在尝试使用“友好的”永久链接结构(如 Adam Darowski 的博客文章1中所述)在我的 Rails 3.2 应用程序中路由内容。我找到了一些描述如何在单个“页面”或“类别”控制器中执行此操作的答案,但理想情况下,我希望应用程序在“部分”URL 的情况下路由到最具体的控制器。

http://example.com / shows / :genre / :series / :season / :episode

因此,例如:/shows/entertainment/the-survivors/01/01将路由到 Episodes 控制器(播放特定系列的第 1 季第 1 集),/shows/entertainment/the-survivors/并将路由到 Series 控制器(列出该系列中的所有剧集)。等等。

我听说嵌套路由的深度不应超过一层,因此这似乎是一个糟糕的解决方案(标准嵌套路由“污染”了带有控制器名称和 ID 的 URL,无论如何/genres/entertainment/shows/the-survivors/seasons/1/episodes/1,我想避免)。

到目前为止,我能想出的最佳解决方案只是match我的 routes.rb 文件中的一系列越来越具体的规则,随着 URL 变得越来越具体,这些规则指向每个控制器。

在 Rails 中有没有更好的方法来做到这一点?

4

1 回答 1

1

我建议使用友好的 url gem,比如friendly_id。我会去掉你网址的“显示”部分,除非它专门为路由添加了一些东西。然后你可以制作像这样的网址:

/entertainment/the-survivors/s01e01

只需按 slug 查找每个系列和剧集(分别为“the-survivors”和“s01e01”)。

我认为无论哪种方式,您都必须像您在问题中提到的那样在路由文件中创建自定义路由,但是我认为这没有问题。

但是,我不同意您创建两个控制器的想法。在你的问题中你提到它

将路由到系列控制器(列出该系列中的所有剧集)

用您的语言,您是在说“列出所有剧集”。剧集是资源,所以如果你是真正的RESTful,那么“系列”页面本身应该是 的index动作EpisodesController,每个剧集show都是EpisodesController.

于 2012-10-03T07:59:40.957 回答