2014-10-28 150 views
2

编辑:资源和控制器已被复数化,这要归功于评论中的反馈。但我的问题仍然存在。没有路线匹配[GET] /用户

我很新的轨道和我试图创建一个Rails的REST API 4. 我有一个路由错误,当我试图执行的User的ressource GET请求:http://api.localhost:3000/users

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

但是,当我执行命令“耙路线”我的终端上,我可以看到,有一个/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 

什么建议吗?

编辑:资源和控制器已被多元化,这要归功于评论中的反馈。但我的问题仍然存在。

+7

除了你的问题,你应该遵循约定,并以复数的资源名称以及控制器的名字。 – blelump 2014-10-28 21:42:58

+0

你能访问你列出的任何网址吗?我相信@blelump是正确的。尝试编辑您的控制器文件名称,它应该工作。 – nikkon226 2014-10-28 22:47:33

+0

感谢您对命名约定的反馈。在我的数据库中,存储有关用户数据的表被命名为'user'。我是否应该将其重命名为“用户”? – 2014-10-29 21:07:13

回答

8

Rails通过从右侧第二个点前面的主机地址中获取该部分来确定URL的subdomain。在你的例子中,你使用主机api.localhost。 Rails会从中解析一个空的子域。

因此,我建议您在hosts文件中配置一个域名,如api.my_app.dev。这将允许Rails从主机中确定正确的api子域部分。

后,你这样做,你的本地服务器可以http://api.my_app.dev:3000/users

顺便说一句回应。我选择了顶级域dev,因为如果使用类似POW这样的工具,它是默认的。

+0

谢谢!你解决了我的问题! – 2014-11-16 13:23:14

4

你需要configuire您的主机:

sudo vim /etc/hosts

添加

127.0.0.1 api.test.com

然后rails s并查看 “http://api.test.com:3000/user” 很有效!

对不起我的英语,希望能帮到你!

+0

感谢您的回答!我已经用'127.0.0.1 \t api.localhost'配置我的'hosts'文件。我使用url访问我的api:'api.localhost:3000'还有一个想法吗? – 2014-10-29 21:05:56

1
namespace :api, path: '/', constraints: { subdomain: 'api' } do 

它是假的 你需要检查root :to => 'adm001s#index'