我有一个 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 和这张票 https://rails.lighthouseapp.com/projects/8994/tickets/2218-current_page-in-rails-222-delivers-wrong-results这是唯一看起来很接近的东西。唯一的评论者认为 current_page 应该“如果两个 URL 都引用同一个 RESTful 对象,则将它们视为同一页面”。
感谢您对此有任何见解。
轨道布线将tolerate尾部斜杠,但传递时不会生成:action => 'index', :controller => 'posts'
to url_for
(with standard路线)。
根据 current_page?文档 http://apidock.com/rails/ActionView/Helpers/UrlHelper/current_page%3F它只是根据传递的参数生成一个 url,然后与当前请求 url 进行比较string。由于生成的 url 不会有尾部斜杠,因此当当前 url 为 /controller 时将返回 true,而当 /controller/ 时将返回 false
有多种方法可以解决您的问题:
- 比较参数,而不是生成的 url
- 从 /controller/ 重定向到 /controller。如果您也为了 SEO 进行页面缓存等,这实际上是一个好主意
- 我确信还有其他方法一如既往:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)