2013-11-25 17 views
30

http://localhost:3000/user/3'a normal ve ajax isteklerine yanıt vermesi gereken bir "UserController" denetleyicisi var.Raylar: response_to JSON ve HTML

Normal bir istek olduğunda, görünümümü oluşturmak istiyorum. Bir AJAX isteği olduğunda, JSON'u iade etmek istiyorum.

Doğru yaklaşım, respond_to do |format| bloğu gibi görünüyor. JSON'u yazmak kolaydır, ancak HTML'ye yanıt vermek ve görünümü her zamanki gibi oluşturmak için nasıl alabilirim?

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

Eylem URL'nizi hiçbir şey olmadan çağırdığınızda, ör./users/3 html döndürür. /users./3.json'u çağırırsanız - json dönecektir –

cevap

63

olarak değiştirebilirsiniz: gösterisi html isteği ve gösterimi için .html.erb, JS isteği için js, erb.

nedenle bu istek request.xhr kontrol ederek ajax olup olmadığını kontrol edebilirsiniz, ayrıca

respond_to do |format| 

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

end 

çalışacak? istek bir ajax ise, doğru döner.

13

Evet, otomatik ex ilgili bir eylem görüntüsü arayacaktır format.html içinde "göstermek işlemek" onun gerekli değildir Bildiğim kadarıyla gereğince

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