命名空间API,资源指定两次

时间:2012-07-28 04:47:49

标签: ruby-on-rails controller

我正在尝试在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

我希望我的html响应版本的资源在'api'命名空间之外(即在常规app / controllers / users_controller.rb区域中)但我的json响应在命名空间内。

然而,当我将我的网址指向“/api/v1/users.json”链接时,它会利用OUTSIDE资源app / controllers / users_controller指定的控制器,而不是我放在app / controllers / api / v1中的控制器。 / users_controller。

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

为什么会发生这种情况

2 个答案:

答案 0 :(得分:1)

您的路由定义看起来不错。我要检查的第一件事是你的rails路由器运行路由:

$ bundle exec rake routes | grep users

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

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

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

查看Rubygems.org source,它具有您尝试实现的相同类型的结构。

答案 1 :(得分:1)

您的控制器应该看起来像

module Api::V1
    class UserController < ActionController::Base
...
    end
end