0

我正在尝试在 Rails 中创建命名空间 API,但遇到了问题

  # Resources
  resources :users do 
    resources :contacts
  end

  #==========================================>
  #  API namespacing and routing
  #==========================================>

  namespace :api do 
    namespace :v1 do

      # =======================>
      # Resources -> Users
      #   Resources -> Contacts
      # =======================>
      resources :users do
        resources :contacts
      end

      # =======================>
      # Resources -> Messages 
      #   Resources -> Transcriptions
      # =======================>
      resources :messages do
        resources :transcriptions 
      end

    end
  end

我想在“api”命名空间之外(即在常规的 app/controllers/users_controller.rb 区域中)拥有我的资源的 html 响应版本,但我的 json 响应在命名空间内。

但是,当我将我的 url 指向“/api/v1/users.json”链接时,它使用了由外部资源 app/controllers/users_controller 指定的控制器,而不是我放入 app/controllers/api/v1/users_controller 的控制器。

尽管命名空间不同,我是否只允许一个资源引用?

为什么会发生这种情况

4

2 回答 2

1

您的路由定义看起来不错。我要检查的第一件事是您的 rails 路由器通过运行生成了哪些路由:

$ bundle exec rake routes | grep users

您应该将定义的用户路由映射到他们各自的 URL 结构。如果出现问题,那么您的路线可能没有正确定义。我怀疑你的情况。

另一个可能的问题可能是命名空间用户控制器中的控制器类名称。所以你在 app/controllers/api/v1 下的用户控制器应该是

class Api::V1::UsersController < ApplicationController
 ....
end

查看Rubygems.org 源代码,它与您尝试实现的结构相同。

于 2012-07-28T12:41:14.707 回答
1

你的控制器应该看起来像

module Api::V1
    class UserController < ActionController::Base
...
    end
end
于 2012-07-28T13:12:26.110 回答