Rails 5:如何在Rescue中声明HEAD 200
Rails 5: How to declare HEAD 200 in Rescue
我有一个 webhook 发送到我的应用程序的页面,我在处理数据时发现 SOAP 错误,但我想向 webhook 发送一个 200 状态。这在控制器中可能吗?
控制器
def example_method
...
rescue Savon::SOAPFault => error
...
# Respond to the HTTP POST request by giving the 'all clear'
head 200
raise
end
首先不要将 soap 调用直接放入您的控制器 - 而是创建一个客户端 class 或 service object 来处理它。
你的控制器应该只真正知道它调用某种服务并且它可能会失败或成功 - 如果你在你的控制器中捕获特定于库的错误,你就会陷入困境。
那么如何在控制器中挽救异常?
您可以在线拯救他们:
class SomethingController
def do_something
begin
# Something.this_may_blow_up!
rescue SomeError => error
head :ok and return
end
end
end
这里的关键是and return
,它会停止控制器流程并防止双重渲染错误。
另一种方法是使用 rescue_from
。
class ThingsController
rescue_from ActiveRecord::RecordNotFound do
render :not_found and return
end
def show
@thing = Thing.find(params[:id])
end
end
以上是如何为每个控制器创建自定义 404 页面的示例。发生的事情是,当控制器上的操作被调用时,它被包装在一个 begin..rescue
块中,该块在控制器中查找 rescue_from
处理程序。
我有一个 webhook 发送到我的应用程序的页面,我在处理数据时发现 SOAP 错误,但我想向 webhook 发送一个 200 状态。这在控制器中可能吗?
控制器
def example_method
...
rescue Savon::SOAPFault => error
...
# Respond to the HTTP POST request by giving the 'all clear'
head 200
raise
end
首先不要将 soap 调用直接放入您的控制器 - 而是创建一个客户端 class 或 service object 来处理它。
你的控制器应该只真正知道它调用某种服务并且它可能会失败或成功 - 如果你在你的控制器中捕获特定于库的错误,你就会陷入困境。
那么如何在控制器中挽救异常?
您可以在线拯救他们:
class SomethingController
def do_something
begin
# Something.this_may_blow_up!
rescue SomeError => error
head :ok and return
end
end
end
这里的关键是and return
,它会停止控制器流程并防止双重渲染错误。
另一种方法是使用 rescue_from
。
class ThingsController
rescue_from ActiveRecord::RecordNotFound do
render :not_found and return
end
def show
@thing = Thing.find(params[:id])
end
end
以上是如何为每个控制器创建自定义 404 页面的示例。发生的事情是,当控制器上的操作被调用时,它被包装在一个 begin..rescue
块中,该块在控制器中查找 rescue_from
处理程序。