2013-02-05 9 views
17

Po biegnę
rails generate scaffold User
Wygenerowany funkcja kontrolera w Rails 3.2.11 do aktualizowania użytkownika wygląda następująco:Dlaczego Railsy chcą zwracać "head: no_content" dla żądań 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 

Linia Jestem ciekaw wraca head :no_content do udanego żądanie aktualizacji JSON . Zrobiłem trochę googlowania, ponieważ zgadywałem, że jest to coś w rodzaju usługi RESTful, aby nie zwracać zaktualizowanego obiektu, ale nie mogłem znaleźć niczego, co by tak twierdziło.

Dlaczego jest to wartość domyślna w porównaniu do zwracania reprezentacji JSON obiektu po aktualizacji?

+0

Świetne pytanie, zastanawiałem się dokładnie to samo. – thewheelz

Odpowiedz

15

Dobre pytanie, najwyraźniej celem jest zwrócenie kodu stanu HTTP 200 z pustym ciałem, patrz this discussion. Może dla zwięzłości lub celów bezpieczeństwa. head :no_content wydaje się stworzyć odpowiedź HTTP 200 (sukces) z pustym korpusem, powrót tego nagłówka odpowiedzi:

Status Code:200 OK 

zobaczyć również this related question.

+2

W rzeczywistości widzę, że 'head: no_content' zwraca 204 bez treści, która wydaje się nie uruchamiać zdarzenia' ajax: success'. –

+1

Jeśli chcesz jawnie zwrócić 200, użyj 'head 200'. Nawet 'head: ok' zwróci wartość 304, która nie zostanie zmodyfikowana przy kolejnych żądaniach. –

+0

@DamienRoche na żądanie 'GET', będziesz chciał, aby' 304 Not Modified' został zwrócony, jeśli zasoby naprawdę nie zostały zmodyfikowane, ponieważ jest to potrzebne, aby buforowanie HTTP działało. Aby zapewnić najlepsze wyniki, ustaw również wygasłe/ostatnio zmodyfikowane nagłówki i/lub nagłówki etagów. – xentek

Powiązane problemy