诊断Rails中的404错误

时间:2012-05-31 13:53:54

标签: ruby-on-rails routes http-status-code-404

我正在尝试向/api/kpi?data=some+stuff发送POST请求:

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

所以我猜测路径不正确。对?我很难理解我的路线是不正确的,还是控制器或电话。

1 个答案:

答案 0 :(得分:3)

当你得到404时,检查你的路线。这通常意味着没有到达控制器的路径。路由是URL和控制器之间链接的原因。如果您的控制器受到攻击,它可能会工作或给您一个运行时错误。

    运行rake routes
  1. Inspect your 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将触发create的操作UsersController

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

    @yfedblum talks about在Rails中使用单数和复数更详细。