ruby-on-rails - Rails API 版本控制的通配符匹配导致无限重定向

标签 ruby-on-rails rails-routing

我正在关注此处发布的关于 versioning an API using Rails routing 的出色解决方案,但我一直遇到无限重定向。

这是我的 routes.rb

的一部分
  namespace :api do

    namespace :v1 do
      resources :books
    end

    namespace :v2 do
      resources :books
    end

    match 'v:api/*path', :to => redirect("/api/v2/%{path}")
    match '*path', :to => redirect("/api/v2/%{path}")

  end

这实际上与发布的答案相同。访问 /api/v1/books/list.jsonapi/v2/books/list.json 一样按预期工作。我遇到的问题是 /api/books/list.json,它应该重定向到 /api/v1/books/list.json。如果我尝试在不指定版本的情况下访问 api,我的浏览器会以无限重定向响应。我的日志如下所示:

Started GET "/api/books/list.json?max_number=10" for 127.0.0.1 at 2013-04-01 22:00:51 -0400


Started GET "/api/v1/books%2Flist" for 127.0.0.1 at 2013-04-01 22:00:51 -0400


Started GET "/api/v1/books%2Flist" for 127.0.0.1 at 2013-04-01 22:00:51 -0400


Started GET "/api/v1/books%2Flist" for 127.0.0.1 at 2013-04-01 22:00:51 -0400

//... and so on

最佳答案

不知道为什么 Ryan Biggs 在发布的问题中的回答不再有效,但为了解决这个问题,我将其更改为:

  namespace :api do

    namespace :v1 do
     resources :books do
      collection do
       get 'list'
       get '/*path', :to => redirect("http://localhost:3000")
      end
     end
    end

    namespace :v2 do
     resources :books do
      collection do
       get 'list'
      end
     end
    end


  match 'v:api/*path', :to => redirect{|params, req|
    "/api/v1/#{params[:path]}.#{params[:format]}#{params[:query_string]}?#{req.query_string}"
  }
  match '*path', :to => redirect{|params, req|
    "/api/v1/#{params[:path]}.#{params[:format]}#{params[:query_string]}?#{req.query_string}"
  }
end

关于ruby-on-rails - Rails API 版本控制的通配符匹配导致无限重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15754941/

相关文章:

ruby-on-rails - 简化 Ruby on Rails 中的分配

ruby-on-rails - Rails 4 路由 : using namespaces with dynamic segments

ruby-on-rails - 在 Ruby on Rails 中通过 ajax 呈现局部 View

ruby-on-rails - Rails 创建或更新用户

html - 页面上的多个 form_fors 导致 _method 属性出现问题

ruby-on-rails - Rails Restful 下载

ruby-on-rails - 设计:登录后 current_user 为 nil

mysql - Rails 独特的约束模型 + 数据库级别和竞争条件

ruby-on-rails - Ruby on Rails *功能*部署的最佳实践?

ruby-on-rails - 设计:使用单表继承实例 current_user