我有一个PostsController,对于这个示例不是必不可少的,但是当我粘贴代码片段时会有所帮助,而我正在使用current_page?
,顾名思义,找出正在显示的页面。我得到了看似奇怪的结果。
current_page?
与/posts
, /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,this ticket是唯一看起来很接近的东西。唯一的评论者认为current_page应“将两个URL视为同一页面,如果它们都引用相同的RESTful对象”。
感谢您对此有任何了解。
答案 0 :(得分:4)
rails路由将容忍尾部斜杠,但是当您将:action => 'index', :controller => 'posts'
传递给url_for
(使用标准路由)时,它将不会生成。
根据current_page? documentation它只是从传递的参数中生成一个url,然后与当前请求url string 进行比较。因为这个生成的url不会有尾部斜杠,所以当当前url是/ controller时它将返回true,而当/ controller /
时它将返回false有几种方法可以解决您的问题: