gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:37:06 26 4
gpt4 key购买 nike

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

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com