ruby-on-rails - 由于 url 编码导致 URL 重写失败

标签 ruby-on-rails ruby ruby-on-rails-3.2

我最近在我的 API 项目上实现了版本控制。现在,我的 api 的 URL 必须以序列 /v1/ 为前缀(因为我目前使用的是 v1)

我不想破坏旧的调用,因此为了确保透明兼容性,我想重写旧的网址。

类似 /events/9999/attendees 的网址应重定向到 /v1/events/9999/attendees

我使用 Rails 路由配置文件 routes.rb 进行了设置,代码如下:

match "*path", :to => redirect("/#{API_CONFIG['current_version']}/%{path}"),
:constraints => lambda { |request| true }

我现在面临的问题是,最终重写的路线似乎是url编码的......(或其他东西)实际上,这就是 %{path} 这似乎坏了。然后:

/events/9999/attendees 重定向到 /v1/events%2F9999%2Fattendees

我做错了什么?

非常感谢

最佳答案

您可以将 block 传递给redirect以指定正确的网址

match "*path", :to => redirect {|params, request| "/v1/#{params[:path]}"}, :constraints => lambda { |request| true }

关于ruby-on-rails - 由于 url 编码导致 URL 重写失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18338816/

相关文章:

ruby-on-rails - 应用程序布局中的 Rails 条件侧边栏

ruby - 从单行用户输入将字符串拆分为整数?

ruby - 我如何有效地强制 Minitest 按顺序运行我的测试?

ruby-on-rails - 如何像laravel 5一样验证rails 4中的请求参数?

ruby-on-rails - Rails 3.2.8 Application.js 和 Application.css 未按预期工作

ruby-on-rails - 在Rails项目中将约束类放在哪里

ruby-on-rails - Ruby 1.9、Rails 2.3.9 以及数据库和 erb View 中的 unicode 字符,仍然不行吗?

ruby-on-rails - 在没有 method_missing 的情况下使用 Rails 获取 SEO 友好的 URLS?

ruby-on-rails - 在 rspec 的 Controller 测试中使用 rails 的 "post",在路由上使用范围和协议(protocol)

ruby-on-rails - 在Rails中,使用基于cookie的 session 存储, session 和cookie是同一件事