2013-11-25 13 views
30

Mam kontroler "UserController", który powinien odpowiadać na zapytania standardowe i ajaxowe na http://localhost:3000/user/3.Szyny: reply_to JSON i HTML

Kiedy jest to normalne żądanie, chcę wyrenderować mój widok. Kiedy jest to żądanie AJAX, chcę zwrócić JSON.

Poprawne podejście wydaje się być blokiem respond_to do |format|. Pisanie JSON-a jest łatwe, ale jak mogę uzyskać odpowiedź HTML i zwyczajnie renderować widok?

def show 
    @user = User.find(params[:id]) 
    respond_to do |format| 
     format.html { 
     render :show ????this seems unnecessary. Can it be eliminated??? 
     } 
     format.json { 
     render json: @user 
     } 
    end 
    end 
+2

Gdy wywołujesz adres URL działania bez niczego, np./users/3 spowoduje zwrócenie html. Jeśli wywołasz /users/3.json - zwróci json –

Odpowiedz

63

jak na mojej wiedzy to nie jest niezbędny do „render pokaz” w format.html będzie automatycznie wyszuka odpowiedniego widzenia działań dla ex: pokaż .html.erb dla żądania html i show, js, erb dla żądania JS.

tak to będzie działać

respond_to do |format| 

    format.html # show.html.erb 
    format.json { render json: @user } 

end 

również można sprawdzić żądanie jest ajax lub nie sprawdzając request.xhr? zwraca true, jeśli żądanie jest ajaxowe.

13

Tak, można go zmienić na

respond_to do |format| 
    format.html 
    format.json { render json: @user } 
end