Rails中example.com/controller和example.com/controller/之间有什么区别?
我有一个PostsController,对于这个例子不是必不可少的,但是当我粘贴代码片段时,它会有用,我正在使用current_page?
顾名思义,要找出正在显示的页面。 我得到了看似奇怪的结果。
current_page?
如果我去/posts
vs. /posts/
将返回不同的答案。
作为测试,在我的控制器的索引视图中,我只是在调用
current_page?(:action => 'index')
如果我去/ controller(没有斜杠), current_page?
将返回true。 但是,如果我转到/ controller /,它将返回false。
记录日志显示两者实际上都采取了同样的行动
Processing PostsController#index (for 127.0.0.1 at 2009-08-11 18:28:12) [GET] Parameters: {"action"=>"index", "method"=>:get, "controller"=>"posts"}
对于两者而言,该动作产生相同的结果,如预期的那样。
我正在使用Rails 2.3.2, 这张票是唯一看起来很接近的。 唯一的评论者认为current_page应“将两个URL视为同一页面,如果它们都引用相同的RESTful对象”。
感谢您对此的任何见解。
rails routing将容忍尾部斜杠,但是当你传递:action => 'index', :controller => 'posts'
url_for
:action => 'index', :controller => 'posts'
到url_for
(带标准路由)时,它不会生成。
根据current_page? 文档它只是从传递的参数生成一个url,然后比较当前的请求url 字符串 。 因为这个生成的url不会有尾部斜杠,当当前url是/ controller时它将返回true,而当/ controller /时它将返回false
有几种方法可以解决您的问题:
- 比较params,而不是生成的url
- 从/ controller /重定向到/ controller。 如果您也为SEO进行页面缓存等,这实际上是一个好主意
- 我确信还有其他方法一如既往:)