Rails 6 正确的错误救援和获取错误消息

Rails 6 proper rescue from error and fetch error message

在我的 Rails 6 应用程序中,我想处理外部 API return 给我一个错误并将其传递给 Failure 方法的情况(它是一个 dry-monad method).

def call
  response = api.check_applicant_status(id: applicant_id, options: options)
rescue Errors::BadRequestError => e
  e.message

  result(response: response, error: e.message)
end

attr_reader :applicant_id

private

def result(response:, error:)
  if response.present?
    Success(response)
  else
    Failure(error)
  end
end

以上代码只有在发生错误时才会起作用。在快乐的道路上(会有适当的回应)整个 class 将 return 来自 response 变量(哈希)的结果,甚至不会触及 result 方法.

我认为 rescue 应该在每个方法的末尾(我猜这是惯例)但在我的情况下,如果路径顺利,它会给出 undefined local variable or method 'e 的错误。

在发生错误时将错误消息传递给 Failure 以及在顺利的情况下将结果(哈希)传递给 Success 的正确方法是什么?

为什么需要私有方法?假设成功除非你救援,然后假设错误对吗?

def call
  response = api.check_applicant_status(id: applicant_id, options: options)
  Success(response)
rescue Errors::BadRequestError => e
  Failure(e.message)
end