布鲁克曼不喜欢营救

时间:2018-11-29 17:06:06

标签: ruby-on-rails ruby error-handling rubygems brakeman

我在模型内部有此方法,并在其中包含了这段代码。它调用gem并返回我想要的对象或找不到404资源。如果我在404上执行方法,则需要如下所示进行救援。如果我只是使用营救,则短毛绒失败了。如果我这样做的话,刹车手会失败。

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

如何在不使lint和brakeman失败的情况下挽救该错误。

1 个答案:

答案 0 :(得分:0)

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

当然,很难说不知道inter子或刹车员到底在抱怨什么……。但这应该更好。您当然不需要使用开始端块,但是有时候linters /社区会发现它更整洁...