2013-02-05 36 views
17

Sau khi tôi chạy
rails generate scaffold User
Chức năng điều khiển được tạo ra trong Rails 3.2.11 để cập nhật một người sử dụng trông như thế này:Tại sao Rails muốn trả lại "head: no_content" cho các yêu cầu JSON PUT?

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 

Dòng Tôi rất tò mò về được trở head :no_content cho một yêu cầu cập nhật JSON thành công . Tôi đã thực hiện một số googling, như tôi đã đoán rằng đây là một số loại tài sản RESTful, không trả lại đối tượng cập nhật, nhưng tôi không thể tìm thấy bất cứ điều gì mà tuyên bố đó là trường hợp.

Tại sao điều này là mặc định, so với trả về biểu diễn JSON của việc cập nhật đối tượng người dùng?

+0

Câu hỏi hay, tôi đã tự hỏi chính xác điều tương tự. – thewheelz

Trả lời

15

Câu hỏi hay, rõ ràng mục đích là trả lại mã trạng thái HTTP 200 bằng một thân trống, xem this discussion. Có thể vì mục đích ngắn gọn hoặc an ninh. head :no_content dường như để tạo ra một phản hồi HTTP 200 (thành công) với một cơ thể trống rỗng, trở về đáp ứng tiêu đề này:

Status Code:200 OK 

cũng thấy this related question.

+2

Tôi thực sự thấy 'head: no_content' trả về 204 No Content, điều này dường như không kích hoạt sự kiện' ajax: success'. –

+1

Nếu bạn muốn trả về 200, sử dụng 'đầu 200'. Ngay cả 'đầu: ok' sẽ trả lại 304 không được sửa đổi trong các yêu cầu tiếp theo. –

+0

@DamienRoche theo yêu cầu 'GET', bạn sẽ muốn một' 304 Không được sửa đổi' được trả lại nếu tài nguyên thực sự không bị sửa đổi, vì điều này là cần thiết để bộ nhớ đệm HTTP hoạt động. Để đảm bảo tập hợp kết quả tốt nhất hết hạn/tiêu đề được sửa đổi lần cuối và/hoặc tiêu đề etag. – xentek

Các vấn đề liên quan