如何在Rails 4中响应外部API回调而不寻找模板?

时间:2016-05-25 14:44:39

标签: ruby-on-rails json

我有一个Rails 4应用程序与外部支付网关通信,处理完付款后(不是对我的请求的响应,而是对我的应用程序中的端点进行POST)。

此端点有一个只处理json的控制器,但每次外部API命中端点时,我都会在服务器日志中收到错误,说它无法找到该操作的模板,尽管其他一切正常并且app正确处理json正文。

这是我的路线:

match 'callback', to: 'gateway#callback', via: [:post], as: :gateway_callback

这是我的控制器(缩写):

class GatewayController < ApplicationController

respond_to :json

  def callback
    if params && params[:event]
      case params[:event]
      when ... (several cases identical to this one)

      when 'PAYMENT.AUTHORIZED'
        payment_authorized(params)
        render json: { status: 200 }
      else
        render json: { status: 406 }
      end
    end
  end

响应正确呈现

{
  "status": 200
}

payment_authorized做了它必须做的事情。但我的服务器尖叫:

ActionView::MissingTemplate (Missing template gateway/callback, application/callback with {:locale=>[:"pt-BR", :pt], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builde
r, :raw, :ruby, :coffee, :haml, :jbuilder]}

如何告诉Rails我只想在没有任何模板的情况下发送json响应?

1 个答案:

答案 0 :(得分:0)

您可以从路线本身设置默认值。只需将defaults.format属性设置为:json

即可
match 'callback', to: 'gateway#callback', via: [:post], as: :gateway_callback,
                  defaults: { format: :json }     # <- Added line of code