2013-12-23 38 views
0

它已被多次詢問,但我仍然對respond_to的效用感到困惑,所以我希望能在上下文中對其進行解釋。爲什麼在這個例子中使用respond_to?

在這種Railscast有關創建RESTful API中,瑞恩·貝茨把一個respond_to :json指令在他的控制器頂部:

class ProductsController < ApplicationController 
    respond_to :json 

    def index 
    respond_with Product.all 
    end 

然而,他已經把他的路線在指定JSON作爲默認格式塊:

namespace :api, defaults: {format: 'json'} do 
    scope module: :v1, constraints: ApiConstraints.new(version: 1) do 
     resources :products 
    end 

此外,我試着在我的控制器中放置相同的指令,但仍能夠提供.html響應。

因此,如果respond_to未設置默認響應格式,並且不阻止其他響應格式,它的用途是什麼?

回答

1

respond_to :html默認是在ActionController :: Base上。這就是爲什麼你仍然可以用HTML迴應。

路由中的格式基本上說,在該名稱空間中請求路由的任何內容都會自動將其'format'參數設置爲'json',因此即使API客戶端沒有明確請求JSON,也會將其設置爲JSON作爲默認值。

respond_to :json只是說如果請求JSON,respond_with應該用JSON響應。

+0

@ LoganSerman- 「respond_to:json只是說如果請求JSON,respond_with應該用JSON響應。」但是,無論如何,它會以JSON響應,即使我刪除該指令。所以我仍然不明白這一點? – Yarin

相關問題