2012-07-28 65 views
0

我想创建一个轨道API名称空间的资源的命名空间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之外'命名空间(即在常规的应用程序/控制器/ users_controller.rb区域),但我的JSON响应内命名空间。

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

我只允许一个资源引用,尽管它的名称空间不同吗?

为什么发生这种情况

+0

显示请求的控制台日志输出/响应将是有益的。然后我们可以确定使用哪个控制器/视图。 – 2012-07-28 16:20:31

回答

1

您的路由定义看起来没问题。我检查的第一件事是你的轨道路由器产生什么样的航线运行:

$ bundle exec rake routes | grep users 

你应该把你定义的用户路由映射到它们各自的URL结构。如果有什么不妥之处,那么你的路线可能没有正确定义。我怀疑你的情况。

另一个可能的问题可能是您的名称空间用户控制器中的控制器类名称。因此,在应用程序/控制器/ API/V1用户控制器应

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

看具有相同类型的结构你想实现Rubygems.org source

+0

我实际上忽略了我的问题中的一个重要部分,它是从base_controller继承而来的(我忘记从ApplicationController继承),如上所述 – Vivek 2012-07-28 18:56:47

1

控制器应该像

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