我有一个 PostsController,对示例来说不是必需的,但在我粘贴片段时会有所帮助,我正在使用 current_page?
顾名思义,找出正在显示的页面。我得到了看起来很奇怪的结果。current_page?
如果我去 /posts
会返回不同的答案对比 /posts/
.
作为测试,在我的 Controller 的索引 View 上,我只是调用
current_page?(:action => 'index')
如果我转到/controller(没有斜杠),
current_page?
将返回真。但是,如果我转到/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 对象,则将它们视为同一页面”。
感谢您对此有任何了解。
最佳答案
rails 路由将 容忍 尾部斜杠,但当您通过 :action => 'index', :controller => 'posts'
时不会生成它至 url_for
(标准路线)。
根据current_page? documentation它只是从传递的参数生成一个 url,然后与当前请求 url 进行比较 字符串 .由于此生成的 url 将没有尾部斜杠,因此当当前 url 为/controller 时返回 true,当/controller/时返回 false
有几种方法可以解决您的问题:
关于ruby-on-rails - Rails 中的 example.com/controller 和 example.com/controller/有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1263369/