Rails中的路由问题

时间:2010-02-12 05:52:52

标签: ruby-on-rails routing

我如何将www.homepage.com/site/about路由到www.homepage.com/about?我仍然想使用“site”作为控制器,我只是想从路由中删除它。

另外,请注意,您通常会在网站名称后面的网页上设置路由,例如关于和联系吗?

2 个答案:

答案 0 :(得分:2)

对于第一个问题,您可以在routes.rb中添加类似的内容:

map.about'/ about',:controller => 'site',:action => '约'

关于第二个问题,我并不完全不理解,你能更具体一点吗?

答案 1 :(得分:2)

  

另外,请注意,您通常会在网站名称后面的网页上设置路由,例如关于和联系吗?

如果您遵循REST(并且您可能应该)的原则,那么基本上每个URL应该终止于“资源”(即:名词,“事物”)。每个资源又有一个控制器,这些控制器有一个standardized and limited set of actions

这与“经典”路由方案略有不同,其中控制器将具有更多不同的操作(因此您可以将更多功能集成到单个更大的控制器中)

因此,例如,在RESTful系统中:

  • / contact将映射到ContactController,某个其他控制器中的“联系人”操作(就像在经典路由中一样)
  • / about同样会映射到AboutController。
  • / site / about将映射到AboutController,但这将是Site命名空间下的“嵌套”路由。如果你想获得关于嵌套的核心(我通常这样做),我会:
    • 将AboutController放入Site模块(因此Sites :: AboutController),然后将其存储在文件/app/controllers/site/about_controller.rb中
    • 创建SiteController
    • Map / site to SiteController

如果您有一个预先存在的Site:AboutController映射到/ site / about并且您想将其重新映射到/ about,您可以使用@ rbaezam79的方法来实现。但是,为了保持一致性,我会认真考虑重新定位和重命名类本身。

我上面列出的所有资源都可能被视为“单身”资源。这意味着:

  • 您使用map.resource而不是map.resources来映射您的路线
  • 默认操作是“show”(而非“index”,因为它与非单例资源一样)。通常,这将是您需要的唯一操作。 (您不会想要创建或删除您的关于页面,不是吗?)
  • 名称通常是单数而不是复数。 (虽然我遇到了一些绊脚石)

设置这样的路线时,请务必定期运行“rake routes”命令;这将向您显示您在任何给定时间获得的确切内容。