为什么在这个例子中使用了respond_to?

时间:2013-12-23 20:38:00

标签: ruby-on-rails

有人被多次询问,但我仍然坦率地对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未设置默认响应格式,并且不会阻止其他响应格式,那么它的用途是什么?

2 个答案:

答案 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请求