我正在为现有的rails app添加一个api,它不像我想要的那样工作。我有下面的错误,我修复了下面的修复程序。我正在寻找一个正确的解释为什么我的原始代码不工作(它是在旧版本的rails中工作吗?我在4.2)。我理解为什么修复工作正常,但它对原始代码有任何缺点。
我的路线:
namespace :api do
namespace :v1 do
resources :users, :only => [:show]
end
end
我的控制器:
class Api::V1::UsersController < ApplicationController
respond_to :json
def show
respond_with User.find(params[:id])
end
end
我的错误:
ActionController::UnknownFormat
Processing by Api::V1::UsersController#show as HTML
Parameters: {"id"=>"1"}
User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 1]]
修复:
def show
@user = User.find(params[:id])
render :json => @user
end
答案 0 :(得分:2)
我的猜测是,请求url和header参数不清楚应用程序应该返回哪种格式。
在您的第一个版本中,请求网址应以.json
结尾,或者请求应具有值为application/json
的HTTP Accept标头。否则,无法确定这是一个应该返回JSON数据的请求。
在您的第二个版本中,您只需说:嘿,无论请求采用何种格式,都将其作为JSON返回。
答案 1 :(得分:1)
您没有请求/api/v1/users/1
默认查找html的错误。
你可以明确表达你的意图:/api/v1/users/1.json
或你的路线:
namespace :api, defaults: { format: :json } do
答案 2 :(得分:1)
这意味着您以不支持的格式发出请求(在您的情况下不是以JSON格式)。请查看this code了解更多详情。
我认为您忘记在网址末尾指定Accept
标头或添加.json
后缀。