我正在尝试向/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
所以我猜测路径不正确。对?我很难理解我的路线是不正确的,还是控制器或电话。
答案 0 :(得分:3)
当你得到404时,检查你的路线。这通常意味着没有到达控制器的路径。路由是URL和控制器之间链接的原因。如果您的控制器受到攻击,它可能会工作或给您一个运行时错误。
rake routes
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
。
给定一个控制器/资源名称,Rails将convention寻找该名称的复数形式。例如,给定resources :user
,Rails将在文件UsersController
中查找app/controllers/users_controller.rb
。 (路径/文件名必须与名称匹配!)
@yfedblum talks about在Rails中使用单数和复数更详细。