2015-05-12 85 views
0

我正在添加一個API到一個現有的軌道應用程序,它不像我想要的那樣工作。我有下面的錯誤,我修復下面的修復。我正在尋找一個正確的解釋,爲什麼我原來的代碼不工作(是否在舊版本的rails中工作?我在4.2上)。我明白爲什麼修復工作正常,但它對原始代碼有什麼缺點。respond_to:json ActionController :: UnknownFormat

我的路線:

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 

回答

2

我的猜測是,從請求url和頭文件參數中不清楚你的應用程序應該返回哪種格式。

在您的第一個版本中,請求url應該以.json結尾,或者請求應該有一個值爲application/json的HTTP Accept頭。否則,無法判斷這是一個應該返回JSON數據的請求。

在你的第二個版本中,你只是說:嘿,不管請求的格式是什麼,都將它作爲JSON返回。

+0

第一和右 – apneadiving

1

沒有你請求的錯誤/api/v1/users/1,它默認查找html。

你可以使你的意圖明顯電話:/api/v1/users/1.json或在您的路線:

namespace :api, defaults: { format: :json } do 
1

這意味着您在不支持的格式要求(在你的情況不是JSON)。查看this code瞭解更多詳情。

我想你忘了指定Accept標題或在您的URL末尾添加.json後綴。

相關問題