如何在Rails4中响应外部API回调而不需要查找模板



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

这个端点有一个只处理json的控制器,但每次外部API访问端点时,我都会在服务器日志中收到错误,说它找不到操作的模板,尽管其他一切都很好,应用程序正确处理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响应?

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

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

最新更新