2014-11-24 68 views
1

我用JBuilder中创建我的API的观点,但许多方法共享相同的JBuilder文件相同的模板:的Rails:respond_with两种方法

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。我尝试了respond_to :json后添加template "devices/device_response",但我得到以下几点:

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

我如何可以定义两种方法独特的JBuilder的模板回应?

谢谢。

+2

我想给'respond_with'方法应该是一个散列:'respond_with @device,状态:200,模板: “设备/ device_response”' – 2014-11-24 11:27:03

+0

但我的文档发现,'respond_with'不以模板作为参数 – 2014-11-24 12:23:03

回答

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)

如果是可接受的格式不被识别,应用程序将返回一个 “406 - 不接受”状态。否则,默认响应是以 呈现以当前动作和所选 格式命名的模板。 index.html.erb。如果没有模板可用,则该行为 取决于所选择的格式:

  • 一个HTML的响应 - 如果请求方法得到的,一个例外是 提出,但其他请求如发布响应取决于 资源是否有任何验证错误(即假设一个 已尝试保存资源,例如通过创建行动)

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

    • 如果存在验证错误,响应会呈现一个默认操作,即对于发布请求为new:对修补程序或put进行编辑。