【问题标题】:No route matches [GET] /users没有路线匹配 [GET] /users
【发布时间】:2014-10-28 21:35:24
【问题描述】:

编辑:资源和控制器已经多元化,这要感谢在 cmets 中写的反馈。但我的问题仍然存在。

我对 Rails 很陌生,我正在尝试在 Rails 4 中创建一个 REST API。 当我尝试在 User ressource 上执行 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

有什么建议吗?

编辑:资源和控制器已经多元化,这要感谢在 cmets 中写的反馈。但我的问题仍然存在。

【问题讨论】:

  • 除了你的问题,你应该遵循约定,复数你的资源名称和控制器名称。
  • 您可以访问您列出的任何网址吗?我相信@blelump 是正确的。尝试编辑您的控制器文件名,它应该可以工作。
  • 感谢有关命名约定的反馈。在我的数据库中,存储用户数据的表名为user。我也应该将其重命名为users 吗?
  • 我刚刚编辑了我的原始帖子,对 users 资源和 users 控制器进行了更改
  • 您是否尝试过使用http://api.lvh.me:3000/users(需要互联网访问)而不是http://api.localhost:3000/user?

标签: ruby-on-rails ruby routes


【解决方案1】:

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

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

完成此操作后,您的本地服务器可以响应http://api.my_app.dev:3000/users

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

【讨论】:

    【解决方案2】:

    您需要配置您的主机:

    sudo vim /etc/hosts

    添加

    127.0.0.1 api.test.com

    然后rails s 并查看“http://api.test.com:3000/user” 它会工作的!

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

    【讨论】:

    • 感谢您的回答!我已经将我的hosts 文件配置为:127.0.0.1 api.localhost。我使用 url 访问我的 api:api.localhost:3000 另一个想法?
    【解决方案3】:
    namespace :api, path: '/', constraints: { subdomain: 'api' } do
    

    这是错误的 你需要检查root :to =&gt; 'adm001s#index'

    【讨论】:

      猜你喜欢
      • 2011-09-27
      • 2013-06-15
      • 2017-08-03
      • 1970-01-01
      • 1970-01-01
      • 2018-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多