Ruby on rails 使用Rails API定制路由

Ruby on rails 使用Rails API定制路由,ruby-on-rails,rails-routing,Ruby On Rails,Rails Routing,我正在使用Rocket_gem为我现有的Rails应用程序提供API访问。我的路线有以下几条: # HTTP routing resources :posts do collection do get 'search' end end # API routing api :version => 1 do resources :posts, :only => [:index, :show] resources :pos

我正在使用Rocket_gem为我现有的Rails应用程序提供API访问。我的路线有以下几条:

  # HTTP routing 
  resources :posts do
    collection do
      get 'search'
    end
  end

  # API routing
  api :version => 1 do
    resources :posts, :only => [:index, :show]
    resources :posts do
      collection do
        get 'search'
      end
    end
  end
我对
posts/
post/:id的json API请求有效
。但是,对
localhost:3000/1/posts/search?query=my_query
的json API查询不起作用

(注意:http请求
localhost:3000/posts/search?query=my_query
works)


如何解决此问题?

我认为您不应该多次重新定义
api
块中的
:posts
资源

api :version => 1 do
  resources :posts, only: [:index, :show] do
    collection do
      get 'search'
    end
  end
end

您的解决方案似乎有效(即,我得到了一个不同的错误)。你能解释一下为什么多次定义
:posts
会引起麻烦吗?我对Rails路由内部的了解还不够,无法给你一个可靠的答案。是方法定义。我能告诉你的是,像这样的多重定义是不必要的,也是不整洁的;这两个原因都是不这样做的原因。如果路由映射程序不允许这样做,则更需要清理代码:)