没有路由匹配[GET] /用户

时间:2014-10-28 21:35:25

标签: ruby-on-rails ruby routes

编辑:由于评论中写的反馈,资源和控制器已经多元化。但我的问题仍然存在。

我是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

有什么建议吗?

编辑:由于评论中写的反馈,资源和控制器已经多元化。但我的问题仍然存在。

3 个答案:

答案 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'