编辑:由于评论中写的反馈,资源和控制器已经多元化。但我的问题仍然存在。
我是Rails的新手,我正在尝试在Rails 4中创建REST API。
当我尝试在User
资源上执行GET请求时出现路由错误:http://api.localhost:3000/users
没有路线匹配[GET]“/ users”
但是,当我在终端上执行命令'rake routes'时,我发现有/users
路由:
api_users GET /users(.:format) api/users#index {:subdomain=>"api"} POST /users(.:format) api/users#create {:subdomain=>"api"} new_api_user GET /users/new(.:format) api/users#new {:subdomain=>"api"} edit_api_user GET /users/:id/edit(.:format) api/users#edit {:subdomain=>"api"} api_user GET /users/:id(.:format) api/users#show {:subdomain=>"api"} PATCH /users/:id(.:format) api/users#update {:subdomain=>"api"} PUT /users/:id(.:format) api/users#update {:subdomain=>"api"} DELETE /users/:id(.:format) api/users#destroy {:subdomain=>"api"}
以下是我的route.rb
文件的内容:
Rails.application.routes.draw do
# create rousources in subdomain api
namespace :api, path: '/', constraints: { subdomain: 'api' } do
resources :users
end
end
users_controller.rb
文件:
module Api
class UsersController < ApplicationController
def index
@users = User.all
render json: users, status: 200
end
end
end
有什么建议吗?
编辑:由于评论中写的反馈,资源和控制器已经多元化。但我的问题仍然存在。
答案 0 :(得分:8)
Rails通过从右边第二个点前面的主机地址获取该部分来确定URL的subdomain
。在您的示例中,您使用主机api.localhost
。 Rails将从中解析空子域。
因此,我建议您在api.my_app.dev
文件中配置hosts
等域名。这将允许Rails从主机确定正确的api
子域部分。
执行此操作后,您的本地服务器可以回复http://api.my_app.dev:3000/users
顺便说一下。我选择了顶级域dev
,因为如果您使用像POW这样的工具,它就是默认值。
答案 1 :(得分:4)
您需要配置主机:
sudo vim /etc/hosts
添加
127.0.0.1 api.test.com
然后rails s
并查看“http://api.test.com:3000/user”
它会起作用!
对不起我的英文,希望对你有帮助!
答案 2 :(得分:1)
namespace :api, path: '/', constraints: { subdomain: 'api' } do
这是假的
你需要检查root :to => 'adm001s#index'