2013-02-05 2 views
17

내가 실행 한 후
rails generate scaffold User
사용자를 업데이트하는 레일 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 

내가 성공 JSON 업데이트 요청 head :no_content을 반환에 대한 궁금 라인 . 나는 이것이 어떤 종류의 RESTful 속성 인 것 같아서 업데이트 된 객체를 반환하지 않는다고 추측했지만 어떤 검색 결과를 보았습니다. 그러나 나는 그럴만한 주장을 찾지 못했습니다.

사용자 개체의 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 요청에 대해 HTTP 캐싱이 작동하는 데 필요하기 때문에 리소스가 진정으로 수정되지 않은 경우 '304 Not Modified'를 반환해야합니다. 최상의 결과 집합을 보장하기 위해 만료/마지막으로 수정 된 헤더 및/또는 etag 헤더도 설정됩니다. – xentek

관련 문제