我正在尝试在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。
我是否只允许一个资源引用,尽管命名空间不同?
为什么会发生这种情况
答案 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