2013-02-05 117 views
17

後,我跑
rails generate scaffold User
Rails中3.2.11生成器功能更新用戶看起來是這樣的:爲什麼Rails想要爲JSON PUT請求返回「head:no_content」?

def update 
    @user = User.find(params[:id]) 

    respond_to do |format| 
    if @user.update_attributes(params[:user]) 
     format.html { redirect_to @user, notice: 'User was successfully updated.' } 
     format.json { head :no_content } 
    else 
     format.html { render action: "edit" } 
     format.json { render json: @user.errors, status: :unprocessable_entity } 
    end 
    end 
end 

線我很好奇在返回head :no_content一個成功的JSON更新請求。我做了一些Google搜索,因爲我猜測這是某種RESTful屬性,不返回更新的對象,但我找不到任何聲稱是這種情況的東西。

爲什麼這是默認值,而不是返回User對象更新後的JSON表示形式?

+0

偉大的問題,我想知道完全一樣的東西。 – thewheelz

回答

15

好問題,顯然目的是返回空狀態的HTTP狀態代碼200,請參閱this discussion。也許爲了簡潔或安全目的。 head :no_content似乎創建一個空體上的HTTP響應200(成功),返回這個響應頭:

Status Code:200 OK 

也參見this related question

+2

我實際上看到'head:no_content'返回204 No Content,它似乎沒有觸發'ajax:success'事件。 –

+1

如果你想顯式返回200,使用'head 200'。即使'head:ok'也會在隨後的請求中返回304而不被修改。 –

+0

@DamienRoche在GET請求中,如果資源確實沒有被修改,你會希望返回一個'304 Not Modified',因爲這是HTTP緩存工作所需要的。要確保最佳結果,請設置過期/最後修改的標題和/或etag標題。 – xentek