刹车工不喜欢救援

Brakeman does not like rescue

我在一个模型中有这个方法,里面有这个代码。它调用 gem 和 returns 我想要的对象或找不到 404 资源。如果我在 404 上执行一个方法,那么我需要如下所示拯救它。如果我只是使用 rescue,linter 就会失败。如果我这样做,这个刹车员就会失败。

find_object
  return_object = Rails.cache.fetch(cache_key + '/variableInsideObject') do
    GemClient.find(id).variableInsideObject
    rescue HttpServices::ResourceNotFoundError
    raise ApplicationController::ExternalServiceError,
        "variable inside object not found for id: #{id}"
  end
end

如何在不让 linter 和 brakeman 失败的情况下挽救这个错误。

Imo 这是此代码的更 Ruby 风格的实现:

def find_object
  return_object = begin
    Rails.cache.fetch(cache_key + '/variableInsideObject') do
      GemClient.find(id).variableInsideObject
    end
  rescue HttpServices::ResourceNotFoundError => e
    Rails.logger.error(e)
    raise ApplicationController::ExternalServiceError,
      "variable inside object not found for id: #{id}"
  end
end

当然,如果不知道 linter 或 brakeman 到底在抱怨什么,就很难说......但这应该更好。您当然不需要使用开始结束块,但有时 linters/community 发现它更整洁...