0

我在一个模型中有这个方法,里面有这个代码。它调用 gem 并返回我想要的对象或找不到 404 资源。如果我在 404 上执行一个方法,那么我需要如下所示拯救它。如果我只使用救援,则 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 失败的情况下挽救这个错误。

4

1 回答 1

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

当然,如果不知道 linter 或制动员到底在抱怨什么,很难说……但这应该更好。您当然不需要使用 begin end 块,但有时 linters/community 会发现它更整洁......

于 2018-11-29T17:26:03.347 回答