Rails:使用两个方法的相同模板response_

时间:2014-11-24 11:18:12

标签: ruby-on-rails json

我使用jbuilder创建API的视图,但许多方法共享相同的jbuilder文件:

module API
  module V1
    class DevicesController < ActionController::Base

    respond_to :json

    def create
      ...
      respond_with @device, status: 201
    end

    def update
      ...
      respond_with @device, status: 200
    end

  end
end

在下面的示例中,createupdate方法共享相同的视图: device_response.json.jbuilder 。我尝试在template "devices/device_response"之后添加respond_to :json,但我得到以下内容:

undefined method `template' for API::V1::DevicesController:Class

如何为两种方法定义唯一的jbuilder模板响应?

感谢。

1 个答案:

答案 0 :(得分:4)

respond_with不会将template作为参数。要渲染相同的模板,您可以使用示例:

def create
  # ......
  respond_with(@device, status: 200) do |format|
    if @device.save
      format.json { redirect_to @device }
    else
      format.json { render 'devices/device_response' }
    end
  end
end

为什么有效respond_with(*resources, &block)

  

如果未标识可接受的格式,则应用程序返回a   '406 - 不可接受'的状态。否则,默认响应是   呈现以当前操作和所选操作命名的模板   格式,例如index.html.erb。如果没有可用的模板,则为行为   取决于所选格式:

  • 用于html响应 - 如果获取请求方法,则会出现异常 提出但是对于其他请求,例如发布回复取决于 资源是否有任何验证错误(即假设一个 已经尝试保存资源,例如,通过创建动作)

    • 如果没有错误,即资源已成功保存,响应重定向到资源即显示操作。

    • 如果存在验证错误,响应将呈现默认操作,即:对于发布请求为new或:为patch或put进行编辑。