1

我正在尝试向以下位置发出 POST 请求/api/kpi?data=some+stuff

curl -i http://127.0.0.1:9010/api/create_kpi -F data="some stuff" 

但我得到一个404。

我的路线是:

# config/routes.rb

namespace :api do
  resource :kpi,  :except => [:edit, :destroy]
end

哪个应该击中我的控制器

# app/controllers/api/kpi_controller.rb

class Api::KpiController < ApplicationController
  def create
    temp = Kpi.new(params[:data])
  end
end

所以我猜路径不正确。对?我很难理解我的路线、控制器或呼叫是否不正确。

4

1 回答 1

4

当您收到 404 时,请检查您的路线。这通常意味着没有到达控制器的路由。路由是 URL 和控制器之间的链接。如果你的控制器被击中,它要么工作要么给你一个运行时错误。

  1. 通过运行检查您的路线rake routes。这是一个非常有用的工具。它应该给你这样的东西:

        users GET    /users(.:format)          users#index
              POST   /users(.:format)          users#create
     new_user GET    /users/new(.:format)      users#new
    edit_user GET    /users/:id/edit(.:format) users#edit
    

    您可以看到它为您提供了哪个[method, URL]请求将命中哪个的映射[controller, action]。比如这里,POST /users会触发的动作createUsersController

  2. 给定一个控制器/资源名称,按照惯例,Rails 会查找该名称的复数形式。例如,给定resources :user,Rails 将UsersController在文件中查找app/controllers/users_controller.rb。(路径/文件名必须与名称匹配!)

    @yfedblum更详细地讨论了 Rails 中单数和复数的使用。

于 2012-05-31T15:32:53.617 回答