编辑:由于评论中的反馈,资源和 Controller 已经多元化。但我的问题仍然存在。
我是 Rails 的新手,我正在尝试在 Rails 4 中创建一个 REST API。
当我尝试对 User
资源执行 GET 请求时出现路由错误:http://api.localhost:3000/users
No route matches [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
有什么建议吗?
编辑:由于评论中的反馈,资源和 Controller 已经多元化。但我的问题仍然存在。
最佳答案
Rails 通过从右侧第二个点前面的主机地址中获取该部分来确定 URL 的子域
。在您的示例中,您使用主机 api.localhost
。 Rails 将从中解析一个空的子域。
因此,我建议在您的 hosts
文件中配置一个类似 api.my_app.dev
的域。这将允许 Rails 从主机确定正确的 api
子域部分。
在你这样做之后你的本地服务器可以响应 http://api.my_app.dev:3000/users
顺便说一句。我选择了顶级域 dev
,因为如果您使用 POW 这样的工具,它是默认域.
关于ruby-on-rails - 没有路由匹配 [GET]/users,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26618905/