ruby-on-rails - Rails 中的 example.com/controller 和 example.com/controller/有什么区别?

标签 ruby-on-rails url-routing

我有一个 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

有几种方法可以解决您的问题:

  • 比较参数,而不是生成的 url
  • 从/controller/重定向到/controller。如果您也为 SEO 进行页面缓存等,这实际上是一个好主意
  • 我确定还有其他方法:)
  • 关于ruby-on-rails - Rails 中的 example.com/controller 和 example.com/controller/有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1263369/

    相关文章:

    javascript - Ember.js 的嵌套路由行为

    php - 遇到几个问题 kohana 框架 : routing and running on ubuntu 12. 04

    Javascript Ajax 重新初始化

    ruby-on-rails - Rails - etags 与页面缓存(文件缓存)

    ruby-on-rails - 大型项目的 sprockets 最佳实践

    ruby-on-rails - 如何使我的回答达到要求的标准

    ruby-on-rails - 验证附件内容类型回形针

    ruby-on-rails - Ruby on Rails form_for 引用类 ID 并传递给子评论

    php - 从子目录飞行 PHP 路由

    vue.js - Nuxt head() 不等待 head 的 asyncData 响应