2013-02-05 13 views
17

私は、ユーザーを更新するため
rails generate scaffold User
のRails 3.2.11で生成されたコントローラ機能を実行した後、次のようになります。私は好奇心だラインが成功したJSON更新要求のためhead :no_contentを返して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 

。私はいくつかのグーグルを行ったことがあります。これは、更新されたオブジェクトを返さないための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'を見ていますが、' ajax:success'イベントを発生させない204 No Contentを返します。 –

+1

200を明示的に返すには、 'head 200'を使います。 'head:ok'でも後続のリクエストで変更されていない304を返します。 –

+0

@DamienRocheを 'GET'リクエストで実行すると、リソースが本当に変更されていない場合には' 304 Not Modified'が返されるようになります。これは、HTTPキャッシングが動作するために必要です。最良の結果を得るためには、ヘッダーやエタグヘッダーも期限切れ/最後に変更してください。 – xentek

関連する問題