有人被多次询问,但我仍然坦率地对respond_to
的效用感到困惑,所以我希望在上下文中对它进行解释。
在这个关于创建RESTful API的Railscast中,Ryan Bates将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
未设置默认响应格式,并且不会阻止其他响应格式,那么它的用途是什么?
答案 0 :(得分:1)
respond_to :html
在ActionController :: Base上。这就是为什么你仍然可以用HTML回复。
路由中的格式基本上表示在该命名空间中请求路由的任何内容都会自动将其“format”参数设置为“json”,因此即使API客户端没有专门请求JSON,也会将其设置为JSON作为默认值。
respond_to :json
只是说如果请求JSON,respond_with
应该使用JSON进行响应。
答案 1 :(得分:0)
respond_to定义在调用respond_with时默认呈现的mime类型。 respond_to:json指定控制器中的所有操作都响应json
参考:http://api.rubyonrails.org/classes/ActionController/MimeResponds/ClassMethods.html
可能是你在ApplicationController中添加了respond_to:html。这就是为什么他们仍在响应html请求