2013-11-25 6 views
30

Ich habe einen Controller "UserController", der auf normale und AJAX-Anfragen an http://localhost:3000/user/3 reagieren sollte.Rails: antwort_zu JSON und HTML

Wenn es eine normale Anfrage ist, möchte ich meine Sicht rendern. Wenn es eine AJAX-Anfrage ist, möchte ich JSON zurückgeben. Der richtige Ansatz scheint ein respond_to do |format| Block zu sein. Das Schreiben des JSON ist einfach, aber wie kann ich es auf den HTML-Code reagieren lassen und den View einfach wie gewohnt rendern?

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

Wenn Sie Ihre Aktion URL ohne etwas aufrufen, z./users/3 gibt es html zurück. Wenn Sie /users/3.json aufrufen, wird json zurückgegeben –

Antwort

63

Wie pro meines Wissens ist es nicht notwendig, um „Show zu machen“ in format.html wird es für eine entsprechende Aktion Ansicht sucht automatisch nach Ex: anzeigen .html.erb für html Anfrage und show, js, erb für JS Anfrage.

so wird dies auch

respond_to do |format| 

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

end 

arbeiten, können Sie die Anfrage prüfen Ajax oder nicht request.xhr Überprüfung ist? es gibt true zurück, wenn die Anfrage eine Ajax-Anfrage ist.

13

Ja, können Sie es ändern zu

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