在rails上使用map.root映射到静态路径

时间:2010-03-04 03:10:29

标签: ruby-on-rails static routes

我在我的RoR项目中使用静态URL。实际上没有要映射到的控制器或操作,所以我尝试输入map.root "/static_page"map.root "static_page"但我收到错误。我如何映射到路径?

编辑:我使用控制器来提供静态页面,这些不是html页面,而是我在这里使用的静态控制器:http://snafu.diarrhea.ch/blog/article/4-serving-static-content-with-rails

2 个答案:

答案 0 :(得分:2)

我认为map.root没有你想做的事。

map.root看起来像是一条命名路线,因为它是。但它是一个特殊的命名路由,用于路由没有本地路径的URL(例如:'http://www.example.com/')。因此它不需要像标准命名路由那样的路径参数。

看起来你要么不知道map.root做了什么,要么试图将root映射塞进自定义静态控制器。

如果是前者,只需为您的路线选择其他名称即可解决问题。 如果是后者,那么你真正需要做的就是传递一个特定的路径值。将它放在你的捕获所有静态页面之上,否则永远不会匹配。

map.root :controller => 'static', :path => "my_template.html"

如果您尝试强制特定路由转到特定静态页面,则创建具有该路径从公共路径下降的文件将完全通过路由。所以你甚至不需要写一条路线。 (例如:http://www.example.com/whatever/static_pages会自动提供public/whatever/static_pages(如果存在)

但是,如果您希望该文件包含erb / haml / etc,则需要使用上述方法通过静态控制器路由请求。问题是它没有映射到控制器/动作,但是通过创建静态控制器,你确实有一条路线,现在是你命名路线的动作。如果由于某种原因路径不适合您的控制器逻辑,您可以使用上面定义的explicit_path操作在内部提供所需的路径作为带有这样的路由的参数。

 map.static_page '/static_page', :controller => 'static',
  :path => "my template.html"

P.S。:在Rails 2.3中不推荐使用template_exist。因此,如果升级,则必须自己定义。

答案 1 :(得分:1)

您不需要路线。只需将文件放入/ public即可正常工作