respond_to:json ActionController :: UnknownFormat

时间:2015-05-12 13:33:04

标签: ruby-on-rails ruby

我正在为现有的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

3 个答案:

答案 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后缀。